Java Tyrus WebSocket API中的会话标识

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

我已经实现了一个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);
 }
我从未使用过任何会话标识。但令人惊讶的是,服务器为各自的会话发送适当的消息。没有任何会话身份验证或标识,服务器不会将一个会话事件发送到另一个会话

clientSession.sendAsyncRemote().sendObject(someObjectInfo); 
有人知道为什么和如何在TyrusAPI中发生吗。 我想知道Tyrus webocket如何支持会话识别

clientSession.sendAsyncRemote().sendObject(someObjectInfo); 
在上一行中,会话对象将基于每个连接创建。它保存引用套接字对象(每个连接)


因此,当消息被发送时,数据将被传输到相应的客户端。

ServerEndpoint默认范围是每个连接,因此每个连接将创建新的ServerEndpoint实例。如果您的观察者是具有正确作用域的CDI/EJB类,那么您将实际得到您想要的,但是“会话标识”不会发生在Tyrus级别,它似乎只是依赖注入框架集成的bi产品。