单个线程中的多个 tcp 连接,使用 libevent 或 boost::asio。有可能?
Multiple tcp connections in single thread with using libevent or boost::asio. It's possible?
是否可以使用libevent在一个线程中创建多个tcp连接到不同的服务器?你能写一个这样一个任务的示例实现吗?
我已经这样做了,但不确定它是否正确:
...
int num_of_connect = 5; /*for example*/
struct event_base *evbase;
struct bufferevent *bev[num_of_connect];
struct sockaddr_in sin[num_of_connect];
evbase = event_base_new();
for(int i=0;i<=(num_of_connect-1);i++){
sin[i].sin_family = AF_INET;
sin[i].sin_addr.s_addr = inet_addr(/*some addr*/);
sin[i].sin_port = htons(/*some port*/);
bev[i] = bufferevent_socket_new(evbase, -1, BEV_OPT_CLOSE_ON_FREE);
bufferevent_setcb(bev[i], cb_evread, cb_evwrite, cb_event, NULL);
bufferevent_socket_connect(bev[i], (struct sockaddr *)&sin[i], sizeof(struct sockaddr_in));
}
event_base_dispatch(evbase);
...
此外,也可以使用boost::asio?例?)
另外,相似的可以使用boost::asio?例?)
是的,完全有可能。这是Boost.Asio提倡的程序设计模式的基础。它通过避免阻塞操作(如connect
、accept
、read
和write
),在不使用显式线程的情况下实现并发。你可能会发现我以前的一些答案很有用
- protor和async_write
- 异步和同步操作的说明
正如托尼在他的回答中指出的那样,Boost。Asio有很好的例子来详细解释异步概念。本教程,特别是异步日间服务器,也是一个很好的起点。
您可以使用boost::asio在异步接受连接的线程中运行。在boost::asio文档页面上有一些示例,这些示例将向您展示如何设置一个在单个线程上接受多个连接的服务器。
我不熟悉libevent来帮助你。
是否可以使用libevent在一个线程中创建多个tcp连接到不同的服务器?你能写一个这样一个任务的示例实现吗?
是的,这是可能的。
你也可以用evconnlistener_new_bind
创建一个监听多个端口的服务器。
如果你想处理一个或多个信号,那么你可以使用evsignal_new
将信号添加到事件库。
在每种情况下(bufferevent_socket_new
, evconnlistener_new_bind
和evsignal_new
),每个事件的回调可能不同。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 使用Boost Interprocess创建托管共享内存需要很长时间
- Boost::posix_time::ptime舍入到给定的分钟数
- 单个线程中的多个 tcp 连接,使用 libevent 或 boost::asio。有可能?