我已经实现了一个websocket服务器,它充当某些事件的观察者。
@ServerEndPoint
public class Server implements SomeObserver
我已经从SomeObserver类实现了objectChanged()。 objectChanged()将在发生某些事件时执行。这是常见的观察者实施。
应用程序逻辑是这样的: 客户端连接到Websocket服务器,服务器为适当的客户端发送适当的事件。
我的编码是这样的:
@ServerEndPoint
public class Server implements SomeObserver
{
Session clientSession = null;
@OnOpen
public void OnOpen(Session session}
{
clientSession = session;
}
//implemented OnMessage and OnClose, OnError methods
public void objectChanged(Event[] event)
{
clientSession.sendAsyncRemote().sendObject(someObjectInfo);
}
我从未使用任何会话识别。但令人惊讶的是,服务器为各个会话发送适当的消息。如果没有任何会话身份验证或标识,服务器不会将一个会话事件发送到另一个会话。
有没有人知道为什么以及如何在Tyrus API中发生这种情况。 我想知道Tyrus webocket如何支持会话识别。
答案 0 :(得分:-1)
clientSession.sendAsyncRemote().sendObject(someObjectInfo);
在上面的行中,将基于每个连接创建会话对象。它包含引用套接字对象(每个连接)。
因此,当发送消息时,数据将被传输到相应的客户端。