gpt4 book ai didi

session - 如何以编程方式在 tomcat 中获取事件的 websocket session ?

转载 作者:行者123 更新时间:2023-11-28 21:51:45 28 4
gpt4 key购买 nike

我正在运行 tomcat 8 来终止 websocket 连接。我想让所有事件的 websocket session 都说一个端点。我知道如果你有一个 session 对象,你可以调用 getOpenSessions()获取所有 session ,但关键是我无权从我需要获取代码中的所有 session 的位置访问 session 对象。

最佳答案

哇,将近一年了还没有答案!我在使用 getOpenSessions() 寻找有关我在 Tomcat 8 上遇到的问题的一些线索时偶然发现了这一点。对于我的问题,我最终做了下面的事情,这也可以解决这个问题。通常,只需要一个静态 map ,您可以在打开时填充并在关闭时从中删除:

@ServerEndpoint(value="/msg/{owner}", encoders=MessageEncoder.class, decoders=MessageEncoder.class)
public class WebSocketListener {
private static final Logger logger = LoggerFactory.getLogger(WebSocketListener.class);
private static Map<String, Session> sessions = new HashMap<String, Session>();

public WebSocketListener() {
System.out.println("created");
}

@OnOpen
public void open(Session session, @PathParam("owner") String owner) {
System.out.println("open "+owner);
sessions.put(session.getId(), session);
session.getUserProperties().put("owner", owner);
System.out.println("open");
if (session.getUserPrincipal() != null) {
session.getUserProperties().put("owner", owner);
}
else {
try {
session.close(new CloseReason(CloseReason.CloseCodes.CANNOT_ACCEPT, "Not authorized"));
} catch (IOException e) {
}
}
}

@OnClose
public void close(Session session) {
System.out.println("close");
sessions.remove(session.getId());
}

@OnError
public void onError(Throwable error) {
logger.error("",error);
}

@OnMessage
public void onMessage(final Session session, final Message message) {
System.out.println("onMessage");
String owner = (String)session.getUserProperties().get("owner");
Long appId = message.getAppId();
for (Session s:sessions.values()) {
System.out.println(s);
if (s.isOpen() && (message.isEcho() || s != session) && owner.equals(s.getUserProperties().get("owner")) && (appId == null || appId.equals(s.getUserProperties().get("appId")))) {
s.getAsyncRemote().sendObject(message);
}
}
}

}

关于session - 如何以编程方式在 tomcat 中获取事件的 websocket session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33225761/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com