使用async_write同时写入不同的套接字

时间:2016-02-06 22:14:31

标签: c++ asynchronous boost network-programming boost-asio

我想写服务器(TCP / IP),我有一些问题,因为我不确定我是否正确思考。

我需要一个只有一个线程的服务器。我需要读取和写入一些客户端的数据。我想使用async_accept中的async_writeasync_readboost::asio等。

如果同时为不同的客户呼叫async_write,是否可以?如果我的程序为一个客户端调用async_write并且在调用处理程序之前为另一个客户端调用async_write该怎么办?

关于async_read的相同问题。

不是问题吗?

是否保证(在这种情况下)第一次调用async_write的回调将在第二次async_write回调之前被调用?

如果某些回调(处理程序)需要很长时间怎么办?其他回调只是在堆栈中等待,直到这个回复完成?如果这个回调永远不会结束,另一个回调将永远不会被执行?我是对的吗?

2 个答案:

答案 0 :(得分:1)

对不同套接字重叠异步读写调用没有问题。我建议你给每个连接都有自己的链,以便在你决定添加TLS支持或使用多个线程时,将来不会中断。可以按任何顺序调用完成处理程序,具体取决于操作实际完成的顺序。当然,您不能同时在同一连接上进行两次异步读取操作或两次异步写入操作。

答案 1 :(得分:1)

  • 不,这不是问题。
  • 不,这是不可取的。
  • 不,回调不应该等待对方。
  • 不,你不对。

套接字I / O为每个套接字独立进行。