有一个数据馈送服务器通过 UDP 方式接收来自各个客户端的馈送,因为客户端发送数据的速度非常快,如果服务器花时间处理接收到的数据,接收缓冲区很容易被填满,所以
- 如果 Feed 服务器 只是多播它收到的所有数据 到 LAN 上的其他服务器 数据馈送服务器有第二个 网卡连接到?其他的每一个 服务器只获取数据 处理并离开的问题 其他数据发送到其他服务器。
- 如果传入数据仍然到达 太快了,有什么策略吗? 保证不会丢失任何数据?
谢谢。
最佳答案
可以尝试的一些策略包括
- 确保接收进程在接收线程中执行的操作很少,只需读取数据并将其发布到内部队列以便在另一个线程上进行处理 - 这应该会减少接收缓冲区填满的可能性
- 在消息中包含序列号。如果接收者发现丢失了消息,它可以向发布者重新请求该消息。此重新请求将非常昂贵,但一般情况下会很快完成。这假设发布者要么在内存中保留合理数量的已发布消息(以允许重新请求),要么将它们保留在某处以应对重播。
关于network-programming - 如何确保 UDP 服务器不会丢失传入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2033265/