哪个更好:Java EE 7中的多个Web套接字端点或单个websocket端点

时间:2013-06-24 16:32:50

标签: websocket java-ee-7

Java EE 7允许您通过注释轻松创建新的端点。但是,我想知道有多个端点可以处理每个消息类型一个好主意,还是我应该只为一个端点设置一个端点?

我倾向于根据每个端点创建与客户端的新套接字连接的理论,拥有一个单一的端点外观。但是,该理论可能不正确,并且可以实现Web Socket,以便它只使用一个TCP / IP套接字连接,无论连接多少个Web套接字端点,只要它们连接到同一主机:端口。

我专门针对Java EE 7,因为可能有其他Web套接字服务器实现可能会做不同的事情。

2 个答案:

答案 0 :(得分:6)

刚刚注意到我的问题re:消息类型的含糊不清。当我说消息类型时,我指的是不同类型的应用程序消息,而不是本机消息类型,例如" binary"或"文字"。因此我将@PavelBucek的答案标记为已接受的答案。

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

因此我得出结论,只有一个端点可以处理应用程序消息,前提是所有内容都是单个本机类型。

这意味着应用程序需要执行调度,而不是依赖某些更高级别的API来为我们执行此操作。

答案 1 :(得分:4)

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

参见WebSocket spec chaper 2.1.3:

  

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

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