Java Tyrus WebSocket API中的会话标识
我已经实现了一个websocket服务器,它充当一些事件的观察者Java Tyrus WebSocket API中的会话标识,java,session,websocket,tyrus,Java,Session,Websocket,Tyrus,我已经实现了一个websocket服务器,它充当一些事件的观察者 @ServerEndPoint public class Server implements SomeObserver 我已经从SomeObserver类实现了objectChanged()。objectChanged()将在发生某些事件时执行。这是常见的观察者实现 应用程序逻辑如下所示: 客户端连接到Websocket服务器,服务器为相应的客户端发送相应的事件 我将其编码如下: @ServerEndPoint public c
@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);
}
我从未使用过任何会话标识。但令人惊讶的是,服务器为各自的会话发送适当的消息。没有任何会话身份验证或标识,服务器不会将一个会话事件发送到另一个会话
clientSession.sendAsyncRemote().sendObject(someObjectInfo);
有人知道为什么和如何在TyrusAPI中发生吗。
我想知道Tyrus webocket如何支持会话识别
clientSession.sendAsyncRemote().sendObject(someObjectInfo);
在上一行中,会话对象将基于每个连接创建。它保存引用套接字对象(每个连接)
因此,当消息被发送时,数据将被传输到相应的客户端。ServerEndpoint默认范围是每个连接,因此每个连接将创建新的ServerEndpoint实例。如果您的观察者是具有正确作用域的CDI/EJB类,那么您将实际得到您想要的,但是“会话标识”不会发生在Tyrus级别,它似乎只是依赖注入框架集成的bi产品。