java - Websockets 是否适用于非常长生命周期的连接?

标签 java websocket netty

我正在考虑将 Web 套接字与 Netty 一起用于客户端连接到服务器以首先获取一些信息的应用程序。然后,它们由服务器注册,特定客户端信息的任何更改都会触发包含更新信息的客户端通知。在这种情况下,通信首先由客户端发起,然后由服务器发起。因此,网络套接字似乎适合这种情况。

但是,在它启动之后,我希望我的客户端能够随时收到服务器的通知。可能是一天后,也可能是几周后。所以,我的问题是使用网络套接字是否可以建立长期连接?

谢谢

最佳答案

当然可以,但有几点需要注意。

如果您希望您的连接长时间持续保持 Activity 状态,那么我建议您向客户端添加一些逻辑以在 onclose 事件发生时重新连接(您需要某种后退以防止某些情况下出现紧密的重新连接循环情况)。

您可能还想每 5 分钟左右发送一次 ping 消息(一个被忽略的简单消息)以防止空闲超时(这可能发生在网络连接的多个位置)。 TCP 网络堆栈通常设置为终止空闲 2 小时的连接,而 ping 消息将使它们保持 Activity 状态。允许浏览器实现对应用程序不可见的 ping 消息,但这是可选的,因此如果您想保证此行为,您应该在应用程序级别实现自己的消息。

注意:Ping/Pong frames是 WebSocket 规范的一部分,但目前还不能通过 API 获得

关于java - Websockets 是否适用于非常长生命周期的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054412/

相关文章:

java - 如何为 Android Google Analytics 添加页面标题参数

java - Derby 数据库如何工作?

spring-security - 使用 Spring Security 进行 Websocket 身份验证

带有 Web 代理的 Golang Gorilla Websocket

java - 在 Netty 中禁用 HTTP 协议(protocol)请求?

java - org.omg.CORBA :MARSHAL & org. omg.CORBA.BAD_PARAM 错误

c++ - libvncserver/libvncclient websocket支持(至vSphere)?

security - Play Framework 2.3.x : How to secure play-framework application URL

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

java - 为什么print语句调用java中的**toString**方法?