JAVA EE 7 WebSocket 实现

Posted

技术标签:

【中文标题】JAVA EE 7 WebSocket 实现【英文标题】:JAVA EE 7 WebSocket implementation 【发布时间】:2014-07-06 14:02:36 【问题描述】:

在 nodejs socket.io 中,所有模块都使用单个套接字连接,这是否适用于 java websocket 实现?

例如

我应该创建多个 ServerEndPoints

@ServerEndpoint("/ws1")
public class Socket1 

@ServerEndpoint("/ws2")
public class Socket2 

@ServerEndpoint("/ws3")
public class Socket3 

是否会使用单个套接字连接来处理所有这些?

或者我应该使用单个 ServerEndpoint 并根据我的消息类型执行操作,例如

    @ServerEndpoint(value = "/ws",
                    encoders = CommandEncoder.class,
                    decoders = CommandDecoder.class)
        public class Socket 
           @OnMessage
           public void onMessage(Command message, Session session)
                switch(message.type)
                   case SomeAction:dosomething(message,session);break;
                   case AnotherAction:doAnotherThing(message,session);break; 
                
           

    

【问题讨论】:

【参考方案1】:

我只能说,从纯粹的个人角度来看,您建议的两种处理传入消息的方式都是合法的。

但除此之外(即使这可能不符合您的要求),您可以使用 URI 路径模板来指定嵌入在您的 URI 中的变量。 在这里,您将只有一个ServerEndpoint,然后检索路径变量并检查它,以便根据替换参数获取您想要流动的服务。

@ServerEndpoint(value = "/ws/wsQualifier",
                encoders = CommandEncoder.class,
                decoders = CommandDecoder.class) 

  @OnMessage
  public void onMessage(Command message,
                          Session session,
                          @PathParam("wsQualifier") int ws) 
    switch(ws) 
      case 1:dosomething(message,session);break;
      case 2:doAnotherThing(message,session);break; 
    
  

【讨论】:

以上是关于JAVA EE 7 WebSocket 实现的主要内容,如果未能解决你的问题,请参考以下文章

Java EE 7:如何将 EJB 注入 WebSocket ServerEndpoint?

Java EE7 websocket 初始化 - 在第一个 @OnOpen 之前实现逻辑

不可序列化的会话 websocket java ee

如何正确关闭 java-ee websocket 连接

Java EE Websocket编程端点如何使用Pathparams?

使用 Java EE Websocket API 接收 ping