繁体   English   中英

TCP套接字缓冲区和数据溢出

[英]TCP Socket buffer and Data Overflow

我的应用程序充当银行服务器的客户端,发送请求并从该服务器获取响应。 在数据库中完成响应处理之后,这需要花费一些时间,因此,如果服务器在0.5秒内发送响应并且db操作需要1秒钟,之后只有我的应用程序再次尝试通过开始接收来从服务器接收数据,那么数据应该存储在某个地方,并且是的,它将存储在哪里。 是否会有一些限制,以便数据溢出,如果发生,是否将关闭此套接字。 我声明我的套接字缓冲区大小为1024。如果有人也有一些文章可以消除我的疑虑,请分享。

您可以控制服务器发送给您的内容吗? 在大多数情况下,当接收方对接收到的数据进行操作时,在完成工作后发送应用程序级ACK将使发送方知道何时发送下一个请求。 这将确保没有数据丢失(因为TCP将确保它不会在网络中丢失)。

如果您无法更改服务器发送数据的方式,则可以考虑在另一个线程中运行接收器,它将每个传入请求保存到缓存(仅在RAM或HD中)。 然后,一个或多个工作线程将读取该缓存中的请求并完成您需要的工作。 这样,您将完全控制数据的缓冲。

我认为您可以使用Socket自己读取大块数据-是吗? 只是不要阅读超出您能承受的范围。 发送方应该执行相同的操作-如果您的输入缓冲区溢出,发送方应等待发送更多内容。 但是在这种情况下可能会出现错误。 如果这确实是一个大问题,请先将数据下载到磁盘上的文件中,然后在获得所有数据后对其进行处理。 我认为您的HDD不会比您的网络慢:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM