asio

C++基于redis的分布式锁

≡放荡痞女 提交于 2019-12-07 12:12:47
之前无意间看到了一下redis的分布式锁,都没有C++版本的,基本全是java的redission。 闲着没事就写了一个。 以前还以为是redis提供的分布式锁的服务,其实不然,只是redis提供了分布式锁的几个基本特性的服务。 1.是客户端持有锁有时间限制,redis对每个key都可以设置过期时间,所以就很方便去控制锁的过期。 2.redis有发布和订阅的服务, 这样任意一个客户端在解锁的时候就可以用过发布的方式去通知所有客户端可以抢锁了。 以下是一个简单的版本, 基本功能是有的,后面具体项目要用的完善。我用的时redisclient的这个库文件,这个库网络I/O用的asio,需要编译的时候需要boost。下载地址: https://download.csdn.net/download/lc_boyi/10845732 DistributeLock.h #ifndef __DISTRBUTELOCK_H_ #define __DISTRBUTELOCK_H_ #include <thread> #include <iostream> #include <windows.h> #include "boost/asio/io_service.hpp" #include "boost/asio/ip/address.hpp" #include "boost/function.hpp"

献给入门C++/Java选择困难综合症患者

我的未来我决定 提交于 2019-12-07 11:50:45
如何让技术群活跃起来?PHP是世界上最好的语言。 没有优秀之分,否则只能显得你不懂另一门语言。如果你想学,那么请远离C/C++,请使用Java,以一个学长的身份,阐述一下。C++向后兼容C,这句话说明C++为了长的更像C,举个最简单的例子split函数,分隔字符串,C++就得重新手写,你说有Boost,好,那也只是准标准库,并非标准库拿来就用。你看看Java,Go还有你们喜欢的Python哪个标准库里没有split?不仅一个小小的函数,连XML,JSON,数据库连接等常用的库,C++也只能寻求三方库或者亲爹Boost,而Java能给你包罗万象的库。不仅如此,对于网络库来说Windows和Linux API也不尽相同,也就是说你的#include <windows.h>在Linux g++里会报错,别说Boost::asio,用起来习惯吗?你看Java相同的代码,在相同虚拟机跑会出错吗?Go相同代码在上述系统也不需要改任何一点东西。C++伟大的STL泛型模板,令人仰望,再看Java Object类,或者Go interface{},世界就清净多了。除此之外,还不用担心内存泄露。也许,你在遇到Qt之前还会走入可怕的MFC。也许,接触不到http协议的B/S架构(网页后台)。也许,好奇爬虫是什么。或许,用Java就能解决一切。但是,他们都说自己比较快。 行啊,《C++ Primer》

C++使用Boost实现Network Time Protocol(NTP)客户端

吃可爱长大的小学妹 提交于 2019-12-06 22:53:52
引 言 笔者机器上安装了两个系统,一个Linux Ubuntu,一个Windows8.1。让人感到郁闷的是,每次从Ubuntu重启进入Windows时,系统时间总是少了8个小时,每次都要用Windows的时间程序进行同步,也就是下面这个东西: 这个东西其实就是一个NTP Client,从Internet上选择一台NTP Server,获取UTC时间,然后设置本地时间。 于是我想自己实现一个这样的程序,先百度一下吧,网上有很多关于NTP的资料和实现代码,大多是单一平台的,不能跨平台 ,下面给几个参考: http://blog.csdn.net/loongee/article/details/24271129 http://blog.csdn.net/chexlong/article/details/6963541 http://www.cnblogs.com/TianFang/archive/2011/12/20/2294603.html 本文使用boost的Asio来跨平台实现NTP Client. 准备 1. 最新的 boost 库,本文使用的是1.56.0版本 要用到里面的ASIO网络库 2. IDE是Visual Studio 2013 with Update3 笔者是版本帝 3. WireShark也是最新的1.12.1版本 用来分析Windows自带的NTP Client

C++ 异步编程:Boost.Asio

可紊 提交于 2019-12-06 10:53:40
Boost.Asio 是一个用于网络和低级 I/O 编程的跨平台 C++ 库,它使用现代 C++ 方法为开发人员提供一致的异步模型 一个异步使用计时器的样例 #include <iostream> #include <boost/asio.hpp> void print(const boost::system::error_code & /* e */) { std::cout <<“hello world!” << std::endl; } int main() { boost :: asio :: io_context me; // 提供对 i/o 功能的访问 boost :: asio :: steady_timer t(io,boost :: asio :: chrono :: seconds(5)); t.async_wait(print); // 插入回调函数 io.run(); return; } asio 库提供了一种保证,即只能从当前调用 io_context::run() 的线程调用回调处理程序 io_context::run() 函数将继续运行,它的工作是计时器上的异步等待,在计时器到期并且回调完成之前调用不会返回 在调用 io_context::run() 前需要给 io_context 设定一些工作,如果省略了 t.async_wait(print);

Boost.Asio

只愿长相守 提交于 2019-12-05 02:21:21
Boost.Asio 是用于网络和底层I/O编程的跨平台C++库,它使用现代C++方法为开发人员提供一致的异步模型。 基本原理 大多数程序都以某种方式与外界交互,无论是通过文件,网络,串行电缆还是控制台。 有时,与网络情况一样,单个I/O操作可能需要很长时间才能完成。 这对应用程序开发提出了特殊的挑战。 Boost.Asio 提供了用于管理这些长时间运行的操作的工具,而无需程序使用基于线程和显式锁定的并发模型。 Boost.Asio 库供使用C++进行系统编程的程序员使用,该系统通常需要访问诸如网络之类的OS功能。 特别是, Boost.Asio 实现了以下目标: 可移植性。 该库应支持一系列常用的OS,并在这些OS之间提供一致的行为。 可扩展性。 该库应促进可扩展到数千个并发连接的网络应用程序的开发。 每个操作系统的库实现应使用最能实现此可伸缩性的机制。 效率。 该库应支持散布式聚集I / O等技术,并允许程序将数据复制减至最少。 来自已建立的API的模型概念,例如BSD套接字。 BSD套接字API得到了广泛的实现和理解,并且在许多文献中都有涉及。 其他编程语言通常将类似的接口用于网络API。 在合理的范围内, Boost.Asio 应该利用现有做法。 使用方便。 该库应采用工具箱而非框架方法,从而为新用户提供较低的入门门槛。 就是说,它应该尝试在学习一些基本规则和准则的情况下

using namespace的故事

旧街凉风 提交于 2019-12-05 00:05:21
1、问题起因(使用boost.asio库时为什么如下图所示using后面不接namespace)       图上的using boost::asio::ip::tcp 在using后面没有namespace,这样是正确的。那么如果加上namespace会是什么结果呢?         加上之后如上图所示,出错。为什么?在之前我也一直不能明白原因,查了using的用法但也没有弄清楚。   其实答案很简单:因为boost::asio::ip 是namespace,而tcp不是,他应该是一个类。 1 namespace boost{ 2 namespace asio{ 3 namespace ip{ 4 class tcp{ 5 ... 6 } 7 ... 8 } 9 .... 10 } 11 ..... 12 }    如上面代码所示,我们就可以写using boost::asio::ip::tcp了,这是using了一个命令空间中的tcp类的作用域。   这个问题算是解决了。 2、问题又来了(为什么可以如下图使用)       acceptor是一个(类类型)class_type,然后他又在tcp这个作用域下面,而tcp它是一个类,为什么在这个类中还有类型,其实就是boost::asio::ip::tcp::acceptor (本人的知识在这不够用了,感觉卡在这了)  

一些博客的收藏

China☆狼群 提交于 2019-12-04 15:11:57
OpenCV OpenCV源码解析之Mat类理解及内存管理 https://blog.csdn.net/tanmx219/article/details/81531538 C/C++ C++中对象的内存布局(一) https://blog.csdn.net/zhuoya_/article/details/80032784 C++实现反射(利用字符串创建对象) https://blog.csdn.net/HQ354974212/article/details/85015132 boost share_from_this类的作用和实现原理 https://blog.csdn.net/acs713/article/details/29174191 boost::asio编写的异步服务器和客户端 https://blog.csdn.net/qq_31558353/article/details/50887432 boost库学习总结 https://blog.csdn.net/xujiezhige/article/details/8652025 Boost.Asio C++ 网络编程 https://mmoaay.gitbooks.io/boost-asio-cpp-network-programming-chinese/content/ https://www.cnblogs.com

使用boost实现线程池thread pool | boost thread pool example

女生的网名这么多〃 提交于 2019-12-04 06:46:33
本文首发于个人博客 https://kezunlin.me/post/f241bd30/ ,欢迎阅读! boost thread pool example Guide boost thread pool example with cpp code code example #include <iostream> //std::cout std::endl #include <thread> //std::thread #include <future> //std::future std::promise #include <utility> //std::ref #include <chrono> //std::chrono::seconds #include <boost/thread.hpp> #include <boost/bind.hpp> #include <boost/asio.hpp> class ThreadPool { public: explicit ThreadPool(size_t size) : work_(io_service_) { for (size_t i = 0; i < size; ++i) { workers_.create_thread( boost::bind(&boost::asio::io_service::run, &io

C++ multiple multicast receiver with boost asio

匿名 (未验证) 提交于 2019-12-03 03:04:01
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I have to implement a multicast receiver able to join a list of multicast groups and process received data in a specific thread using boost. I did try the following code..... boost::asio::io_service m_io_service; boost::asio::ip::udp::socket m_multicast_socket(m_io_service); // listen address boost::asio::ip::address listen_address = boost::asio::ip::address::from_string("0.0.0.0"); // listen port unsigned short multicast_port = m_configuration->m_multicast_interface_port; boost::asio::ip::udp::endpoint listen_endpoint( listen_address,