C++ 使用libevent或boost::asio在单个线程中建立多个tcp连接。它';有可能吗?

C++ 使用libevent或boost::asio在单个线程中建立多个tcp连接。它';有可能吗?,c++,c,boost-asio,libevent,C++,C,Boost Asio,Libevent,是否可以使用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

是否可以使用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);
...
。。。
int num_of_connect=5/*比如说*/
结构事件库*evbase;
结构缓冲事件*bev[连接的数量];
sin中的结构sockaddr_[连接的数量];
evbase=event_base_new();

对于(int i=0;i您可以使用boost::asio在异步接受连接的线程中运行。上的示例将向您展示如何设置在单个线程上接受多个连接的服务器


我不熟悉libevent来帮助您。

您可以使用boost::asio在异步接受连接的线程中运行。上的示例将向您展示如何设置在单个线程上接受多个连接的服务器

我对libevent不熟悉,无法帮助您

此外,也可以采用类似的方法 使用boost::asio实现? 例如?)

是的,这是完全可能的。这是Boost.Asio推动的proactor设计模式的基础。它通过避免阻塞操作(如
connect
accept
read
write
)来实现并发,而无需使用显式线程。你可能会发现我以前的一些答案在这里很有用

正如Tony在中指出的那样,Boost.Asio提供了非常好的例子,详细解释了异步概念。本教程,特别是,也是一个很好的开始

此外,也可以采用类似的方法 使用boost::asio实现? 例如?)

是的,这是完全可能的。这是Boost.Asio推动的proactor设计模式的基础。它通过避免阻塞操作(如
connect
accept
read
write
)来实现并发,而无需使用显式线程。你可能会发现我以前的一些答案在这里很有用

正如Tony在中指出的那样,Boost.Asio提供了非常好的例子,详细解释了异步概念。本教程,特别是,也是一个很好的开始

是否可以使用libevent在一个线程中创建到不同服务器的多个tcp连接?您能为这样一个任务编写一个示例实现吗

是的,这是可能的

您还可以使用
evconnlister\u new\u bind
创建一个在多个端口上侦听的服务器

如果您想处理一个或多个信号,那么可以使用
evsignal\u new
向事件库添加信号

在每种情况下(
bufferevent\u socket\u new
evconnlister\u new\u bind
evsignal\u new
),每个事件的回调都可能不同

可以使用libevent在一个线程中创建到不同服务器的多个tcp连接吗?您可以编写这样一个任务的示例实现吗

是的,这是可能的

您还可以使用
evconnlister\u new\u bind
创建一个在多个端口上侦听的服务器

如果您想处理一个或多个信号,那么可以使用
evsignal\u new
向事件库添加信号

在每种情况下(
bufferevent\u socket\u new
evconnlister\u new\u bind
evsignal\u new
),每个事件的回调都可能不同