答案 0 :(得分:3)
如果您需要知道哪些消息已到达对等应用程序,则对等应用程序必须发送确认。
答案 1 :(得分:3)
如果你想要这种级别的保证,听起来你真的想要JMS。这不仅可以确保消息已经传递,而且还可以正确处理。也就是说,如果因为错误而可以丢弃它,那么交付非常可靠是没有意义的。
您可以监控哪些消息正在等待以及哪些消费者落后。观察生产者以查看它正在发送的消息,并在消息关闭时保存消息,并在重新启动时可用。即使消费者重新启动也是可靠的交付。
答案 2 :(得分:1)
TCP总是可靠的。您不需要确认。但是,要检查客户端是否已启动,您可能还需要使用带有确认的UDP流。像PING一样? PONG!系统。可能也是您可以调整的TCP设置。
答案 3 :(得分:1)
答案 4 :(得分:1)
您可以考虑使用SO_KEEPALIVE套接字选项,如果没有数据通过套接字传输2小时,将导致连接关闭。但是,显然在许多情况下,这并不能提供应用程序通常所需的控制级别。
第二个问题是某些TCP / IP堆栈实现很差,并且在发生网络中断时可能会使您的服务器保持悬空连接。
因此,我建议在您的客户端和服务器之间添加应用程序级别的心跳,以确保双方仍然活着。如果第三方客户端仍然活着但没有响应,因此停止发送心跳,这也提供了断开连接的优势。