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 之前实现逻辑