我想写服务器(TCP / IP),但我有一些问题,因为我不确定我是否认为正确。
我需要只有一个线程的服务器。我需要向某些客户端读取和写入数据。我想使用async_accept
中的async_write
,async_read
,boost::asio
等。
如果同时为不同的客户端调用async_write
,可以吗?如果我的程序为一个客户端调用async_write
并且在调用处理程序之前为另一个客户端调用async_write
怎么办?
关于async_read
的相同问题。
没问题吗
是否保证(在这种情况下)从第一个调用async_write
的回调将在从第二个async_write
的回调之前被调用?
如果某个回调(处理程序)花费很长时间怎么办?其他回调仅在堆栈中等待,直到完成该回调?如果此回调永无休止,则将永远不会执行另一个回调?我对吗?
最佳答案
将异步读取和写入调用重叠到不同的套接字没有问题。我建议您为每个连接分配自己的链,以便将来在决定添加TLS支持或使用多个线程的情况下不会中断。可以按任何顺序调用完成处理程序,具体取决于操作实际完成的顺序。当然,您不能同时在同一连接上进行两个异步读取操作或两个异步写入操作。