【问题标题】:Are Websockets adapted to very long-lived connections?Websockets 是否适用于非常长的连接?
【发布时间】:2012-08-16 18:31:49
【问题描述】:

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

但是,在它启动之后,我希望我的客户端能够随时得到服务器的通知。可能是几天后,也可能是几周后。那么,我的问题是使用 Web 套接字可以实现非常长的连接吗?

谢谢

【问题讨论】:

    标签: java websocket netty


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 是的 Ping/Pong 框架不是 web 浏览器 javascript api 的一部分,但它们是 netty 的一部分。
    【解决方案2】:

    长寿命连接是 WebSocket 的设计目的。根据您的客户端连接方式,这些连接的生命周期可能会受到限制,即在零售 DSL 连接上,通常至少每 24 小时强制重新连接一次。

    然后,您似乎想要的是在原始 WebSocket(仅提供双向消息传递)之上发布和订阅消息传递模式。看看:http://wamp.ws(和http://autobahn.ws)。

    免责声明:我是 WAMP 和 Autobahn 的原作者,为 Tavendo 工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-02
      • 2020-06-03
      相关资源
      最近更新 更多