【发布时间】:2013-09-25 10:02:47
【问题描述】:
我正在尝试实现一个 Websocket 连接,以这里为例 - https://gist.github.com/chitan/3063774。 这是一个回声服务器。 我的问题是—— 我如何从特定用户那里获取消息并将其发送给另一个用户,而不是回显给同一个用户。 我搜索了很多,我发现的大多数示例都是 Echo 示例。
【问题讨论】:
标签: html jakarta-ee servlets websocket
我正在尝试实现一个 Websocket 连接,以这里为例 - https://gist.github.com/chitan/3063774。 这是一个回声服务器。 我的问题是—— 我如何从特定用户那里获取消息并将其发送给另一个用户,而不是回显给同一个用户。 我搜索了很多,我发现的大多数示例都是 Echo 示例。
【问题讨论】:
标签: html jakarta-ee servlets websocket
在 Java EE7 中,您可以轻松做到这一点。想一个简单的例子。如果您在带有@OnMessage 注释的方法中编写client.getBasicRemote().sendObject(message);,则它将仅在活动的客户端会话中可用。
@ServerEndpoint("/websocket")
public class ChatEndpoint {
@OnMessage
public void message(String message, Session client) throws IOException, EncodeException {
client.getBasicRemote().sendObject(message);
}
}
如果您在 client.getOpenSessions() 上循环消息,那么它将可供所有客户端使用:
@OnMessage
public void message(String message, Session client) throws IOException, EncodeException {
for (Session peer : client.getOpenSessions()) {
peer.getBasicRemote().sendObject(message);
}
}
详情请到此tutorial。
【讨论】:
如果您仍需要使用 Java 6 和 WebSocketServlet,您可以执行以下操作:
public class WsChatServlet extends WebSocketServlet{
public StreamInbound createWebSocketInbound(String protocol){
MyMessageInbound ms = new MyMessageInbound();
// store ms somewhere and than find it and use getWsOutbound() to respond
return ms;
}
...
}
【讨论】: