UDP服务器套接字无法解析所有收到的数据

时间:2018-05-25 19:38:43

标签: python-2.7 sockets server buffer pickle

我正在使用 UDP 实现客户端 - 服务器模型。客户端发送服务器数据,除了接收服务器数据外,服务器还需要解析它。现在,如果我在接收数据后没有解析数据,则服务器会将100%的数据写入文件。但是在解析它时,它会被延迟并且一些数据不会写入输出文件。

服务器代码:

'timestamp.txt?v=' + new Date().getTime()

我该如何解决这个问题?服务器仍然需要写入所有数据并解析它 或者我错过了什么,在这种情况下UDP数据包会丢失?

1 个答案:

答案 0 :(得分:0)

我要尝试的第一件事是增加UDP套接字的传入数据缓冲区(例如sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 128*1024)),以便在解析数据时溢出的可能性降低。

如果这还不够,可以通过将接收到的数据包添加到列表/队列(而不是立即解析它们),然后解析它们(在所有之后),通过更多的工作,您可以分离数据的接收和解析。已收到数据包)或单独(低优先级)线程,以便接收传入数据包不会延迟。

如果仍然没有给你足够的可靠性,那么你可能想重新设计你的系统以使用TCP流而不是UDP数据包,因为TCP流会自动降低传输速度以匹配接收程序的速度,并且如果/当它们因任何原因被丢弃时,它将根据需要自动重新发送数据包。

请注意,UDP数据包可以并且将因任何原因而丢失,不存在保证传送UDP数据包的情况。如果您打算使用UDP,那么您将不得不忍受或找到一些机制来恢复。