使用websocket时,希望在OnOpen时在roomList里添加新的连接,存在static里面,怎么实现?

发布于 2022-09-12 02:25:13 字数 1341 浏览 18 评论 0

使用websocket时,希望在OnOpen时在roomList里添加新的连接,存在static里面,怎么实现?

public class Socket {
    //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
    private static int onlineCount = 0;
    /*websocket 客户端会话 通过Session 向客户端发送数据*/
    private Session session;
    /*线程安全set 存放每个客户端处理消息的对象*/
    private static CopyOnWriteArraySet<Socket> webSocketSet = new CopyOnWriteArraySet();
    /*websocket 连接建立成功后进行调用*/


    private static Map<String, String> userList = new HashMap<String, String>();

    private static SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss");//创建时间格式对象

    /**
     * 功能:创建一个房间的集合,用来存放房间
     * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。
     * 若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识
     */
    private static ConcurrentHashMap<String, ConcurrentHashMap<String, Socket>> roomList = new  ConcurrentHashMap<String,ConcurrentHashMap<String, Socket>>();

    //重新加入房间的标示;
    private int rejoin = 0;
    static {
        roomList.put("room1", new ConcurrentHashMap<String, Socket>());
        roomList.put("room2", new ConcurrentHashMap<String, Socket>());
        roomList.put("wuxian20200424", new ConcurrentHashMap<String, Socket>());
    }
    @OnOpen
    public void onOpen(@PathParam(value = "info") String param, Session session) {
    
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

与往事干杯 2022-09-19 02:25:13

websocket可以用连接的session传输数据,不需要用socket

roomId和userId,需要你自己根据逻辑获取,是不是放在param里的?

@OnOpen
public void onOpen(@PathParam(value = "info") String param, Session session) {
    String roomId = ...;
    String userId = ...;
    roomList.get(roomId).put(userId, session); 
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文