network-programming - 如何确保 UDP 服务器不会丢失传入数据?

标签 network-programming udp tcp

有一个数据馈送服务器通过 UDP 方式接收来自各个客户端的馈送,因为客户端发送数据的速度非常快,如果服务器花时间处理接收到的数据,接收缓冲区很容易被填满,所以

  1. 如果 Feed 服务器 只是多播它收到的所有数据 到 LAN 上的其他服务器 数据馈送服务器有第二个 网卡连接到?其他的每一个 服务器只获取数据 处理并离开的问题 其他数据发送到其他服务器。
  2. 如果传入数据仍然到达 太快了,有什么策略吗? 保证不会丢失任何数据?

谢谢。

最佳答案

可以尝试的一些策略包括

  • 确保接收进程在接收线程中执行的操作很少,只需读取数据并将其发布到内部队列以便在另一个线程上进行处理 - 这应该会减少接收缓冲区填满的可能性
  • 在消息中包含序列号。如果接收者发现丢失了消息,它可以向发布者重新请求该消息。此重新请求将非常昂贵,但一般情况下会很快完成。这假设发布者要么在内存中保留合理数量的已发布消息(以允许重新请求),要么将它们保留在某处以应对重播。

关于network-programming - 如何确保 UDP 服务器不会丢失传入数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2033265/

相关文章:

perl - 如何在我的 Perl TCP 脚本中诊断 "Cannot determine peer address"?

.net - VB6 WinSock TCP 客户端和 .NET TCP 服务器

c# - 无法让 Mosquitto 允许从外部本地网络连接

macos - 以编程方式使用 sysctl 设置 tcp 延迟确认

network-programming - 如何遍历IP地址范围?

c++ - 安全 UDP 套接字编程

linux - Linux 中的高性能数据包处理

sockets - 重新连接以太网后,UDP套接字将写入过期的数据包。以太网断开连接后,如何从套接字刷新写缓冲区?

java - 使用DataInputStream接收文件信息并写入

linux - 在 Linux 中从 kernel/net/sched 文件夹加载不同的模块