JAVA EE 7 WebSocket实现

时间:2014-07-06 14:02:37

标签: java java-ee websocket java-ee-7

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

例如

我应该制作多个ServerEndPoints

@ServerEndpoint("/ws1")
public class Socket1 {}

@ServerEndpoint("/ws2")
public class Socket2 {}

@ServerEndpoint("/ws3")
public class Socket3 {}

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

或sholud我使用单个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 个答案:

答案 0 :(得分:2)

我只能说,从纯粹的个人观点来看,您建议处理传入邮件的方式都是合法的。

但除此之外(尽管这可能不符合您的要求),您可以使用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; 
    }
  }
}