使用libevent或boost :: asio在单个线程中进行多个tcp连接。这是可能的?

| 是否可以使用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促进的proactor设计模式的基础。通过避免诸如
connect
accept
read
write
之类的阻塞操作,它无需使用显式线程即可实现并发。您可能会发现我以前的一些答案对您有用 Proactor和async_write 澄清异步和同步操作 正如Tony在回答中指出的那样,Boost.Asio提供了许多出色的示例,详细解释了异步概念。教程,特别是异步日间服务器,也是一个不错的起点。     
您可以使用boost :: asio在异步接受连接的线程中运行。在boost :: asio文档页面上有一些示例,它将向您展示如何设置一个服务器,该服务器在单个线程上接受多个连接。 我不熟悉libevent可以为您提供帮助。     
  是否可以使用libevent在一个线程中创建到不同服务器的多个tcp连接?您能写一个这样的任务的示例实现吗? 是的,有可能。 您还可以创建一个服务器,使用ѭ5侦听多个端口。 而且,如果您想处理一个或多个信号,则可以使用
evsignal_new
将信号添加到事件库中。 在每种情况下(
bufferevent_socket_new
evconnlistener_new_bind
evsignal_new
),每个事件的回调可能会有所不同。     

要回复问题请先登录注册