【问题标题】:Which is better: multiple web socket endpoints or single web socket endpoint in Java EE7哪个更好:Java EE 7 中的多个 Web 套接字端点或单个 Web 套接字端点
【发布时间】:2013-06-21 06:05:28
【问题描述】:

Java EE 7 允许您通过注释非常轻松地创建新端点。但是,我想知道有多个端点来处理每种消息类型是一个好主意,还是我应该只为所有事情设置一个端点外观?

我倾向于拥有一个单一的端点外观,基于每个端点都会创建一个到客户端的新套接字连接的理论。然而,这个理论可能是不正确的,并且 Web Socket 可能会被实现,以便它只使用一个 TCP/IP 套接字连接,而不管连接了多少个 Web 套接字端点,只要它们连接到同一个主机:端口。

我特别要求 Java EE 7,因为可能有其他 Web 套接字服务器实现可能会做不同的事情。

【问题讨论】:

    标签: websocket java-ee-7


    【解决方案1】:

    刚刚注意到我的问题:消息类型有歧义。当我说消息类型时,我指的是不同类型的应用程序消息,而不是诸如“二进制”或“文本”之类的本机消息类型。因此,我将@PavelBucek 答案标记为已接受。

    但是,我确实尝试过使用 Glassfish 进行实验,并且有两个端点。我的怀疑是正确的,每个连接的端点都建立了一个 TCP 连接。如果在单个页面上使用多个 websocket 端点,这将导致服务器端的负载增加。

    因此,我得出结论,只要一切都是单一的原生类型,就应该只有一个端点来处理应用程序消息。

    这意味着应用程序需要进行调度,而不是依赖一些更高级别的 API 来为我们完成。

    【讨论】:

      【解决方案2】:

      这里唯一有效的答案是后一种选择 - 具有多个端点。

      参见WebSocket spec chaper 2.1.3:

      API 将每个 Session 的 MessageHandler 注册限制为每个原生 websocket 消息类型一个 MessageHandler。 [WSC 2.1.3-1] 换句话说,开发者最多只能注册一个 MessageHandler 用于传入文本消息,一个 MessageHandler 用于传入二进制消息,一个 MessageHandler 用于传入 pong 消息。如果违反此限制,则 websocket 实现必须生成错误 [WSC 2.1.3-2]。

      至于使用或不使用多个 TCP 连接 - AFAIK 目前将为每个客户端建立新连接,并且没有简单的方法可以强制执行其他任何操作。 WebSocket multiplexing 应该可以解决,但我认为没有任何 WebSocket API 实现支持它(我可能错了..)

      【讨论】:

      • 这实际上回答了我上面提出的问题,因为单词消息类型的歧义。
      • 对不起,我有点慢,所以,如果我使用多个端点,每个客户端只会打开一个连接,或者每个端点只有一个连接?
      • 每个端点的连接。有一个多路复用的 rfc 草案,但从未完成 (tools.ietf.org/html/draft-ietf-hybi-websocket-multiplexing-11)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多