在Java EE7中,多个web套接字端点或单个web套接字端点哪个更好



Java EE 7允许您通过注释非常容易地创建新的端点。然而,我想知道让多个端点一个来处理每种消息类型是一个好主意,还是应该让我所有的东西都只有一个端点外观?

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

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

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

然而,我确实用Glassfish做了一个实验,有两个终点。我的怀疑是正确的,每个连接的端点都建立了TCP连接。如果在一个页面上使用多个websocket端点,这将在服务器端造成更大的负载。

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

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

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

参见WebSocket规范第2.1.3节:

API将每个会话的MessageHandler注册限制为每个本机websocket消息类型一个MessageHandler。〔WSC 2.1.3-1〕换句话说,开发人员最多只能为传入的文本消息注册一个Mes-sageHandler,为传入的二进制消息注册一一个MessageHandler,并为传入的pong消息注册一条MessageHandler。如果违反此限制,websocket实现必须生成一个错误[WSC 2.1.3-2]。

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

相关内容

  • 没有找到相关文章

最新更新