java - 在JAVA中通过不可靠的网络发送消息

标签 java sockets activemq netty

我需要通过无线网络从移动的计算机发送连续的消息流(带有时间戳和 x/y 坐标的简单文本消息)。将会有很多这样的短信(例如每秒 200 条),不幸的是,网络连接很可能不可靠,因为发送设备会不时离开 WLAN 区域...当连接不可用时,所有即将发送的消息应进行缓冲,直到连接再次恢复。传输消息的顺序并不重要,因为它们包含时间戳,但必须传输所有消息。

发送这些电报的简单但可靠的方法是什么?是否可以只使用“普通”TCP 或 UDP 套接字连接?当连接暂时断开时,消息是否会被缓冲并在之后自动发送?或者是直接检测并报告连接丢失,因此我可以缓冲消息并尝试自行定期重新连接?像 Netty 这样的库在这里有帮助吗?

我还考虑过使用代理来代理通信(例如 ActiveMQ 代理网络)作为替代方案。这里的开销会不会太大了?!在这种情况下,您会建议使用另一种消息中间件吗?

最佳答案

TCP 保证传送(即在连接时) - 您应该检查连接是否已断开,并在重试连接时将消息放入队列中。一旦发现连接恢复,将队列转储到 TCP 套接字中。

还要查看 TCP Keepalive 以识别已关闭的连接:http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html

关于java - 在JAVA中通过不可靠的网络发送消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22518933/

相关文章:

java - 在 java 中通过服务器和客户端之间的套接字传输 XML

java - ActiveMQ 上的异常 : org. mule.module.launcher.DeploymentStartException : ClassNotFoundException: org. apache.activemq.ActiveMQConnectionFactory

java - 关于apache activemq的认证

java - Horizo​​ntalScrollView的scrollTo不会滚动到 View 的原始宽度之上

java - iText 7 Html2Pdf 多次使用相同字体

javascript - Node.js : SocketIO vs http request performance

c - 'kill -9 进程 ID' 信号处理程序

java - Tomcat 4.1.24、slf4j 1.6.4 和 activemq 5.5.1 不兼容

java - 用另一个替换字符串的一部分

java - 检索不同 flavor 的 applicationId?