我正在使用 UDP 实现客户端 - 服务器模型。客户端发送服务器数据,除了接收服务器数据外,服务器还需要解析它。现在,如果我在接收数据后没有解析数据,则服务器会将100%的数据写入文件。但是在解析它时,它会被延迟并且一些数据不会写入输出文件。
服务器代码:
'timestamp.txt?v=' + new Date().getTime()
我该如何解决这个问题?服务器仍然需要写入所有数据并解析它 或者我错过了什么,在这种情况下UDP数据包会丢失?
答案 0 :(得分:0)
我要尝试的第一件事是增加UDP套接字的传入数据缓冲区(例如sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 128*1024)
),以便在解析数据时溢出的可能性降低。
如果这还不够,可以通过将接收到的数据包添加到列表/队列(而不是立即解析它们),然后解析它们(在所有之后),通过更多的工作,您可以分离数据的接收和解析。已收到数据包)或单独(低优先级)线程,以便接收传入数据包不会延迟。
如果仍然没有给你足够的可靠性,那么你可能想重新设计你的系统以使用TCP流而不是UDP数据包,因为TCP流会自动降低传输速度以匹配接收程序的速度,并且如果/当它们因任何原因被丢弃时,它将根据需要自动重新发送数据包。
请注意,UDP数据包可以并且将因任何原因而丢失,不存在保证传送UDP数据包的情况。如果您打算使用UDP,那么您将不得不忍受或找到一些机制来恢复。