通过TCP发送大数据的最佳方法是什么,请考虑以下情况:
我有64个相同的软件正在运行-使用boost asio执行多核线程池。
该软件的任何副本都可以决定发送消息(2mb)。当他们决定发送消息时,会将其发送到网络中的所有63种软件。
此外,任何时候,多个软件都可以决定同时发送(最多64个),这意味着我的软件可以同时从64个TCP套接字同时接收64条消息,单个消息的大小最大为2MB每。这也意味着我可以决定同时向其他64台计算机发送2MB数据。
我目前在所有64个套接字上调用boost asio sync_write。而且这可能在所有其他63台计算机上同时发生。
在读取方面,所有套接字都在执行async_read(读取1条表示整个消息的大小),以及其多核处理器(16核)。
所有的async_read和async_write都使用boost asio(所以线程池)
我的问题是我遇到了两个问题:
在同一套接字上的另一个async_write完成之前,我正在调用async_write。我发现了错误,正在考虑使用同步写入或队列-有人可以建议吗?
我收到以下错误消息: 胚胎SYN_RECV套接字收到21个复位 由于套接字缓冲区溢出,从接收队列中删除了205个数据包
所以我调高了套接字缓冲区的大小,现在问题解决了。但是,我想知道如何使它机械化,以便他们更好地处理?我确定我不是唯一发送2MB消息的人,那么其他人如何使用boost asio处理此消息?
在这种情况下,哪种软件架构会更好?