zoukankan      html  css  js  c++  java
  • websocket简单使用

    @ServerEndpoint(value = "/datatrans/socketServer/{datatransSocket}")
    @Component
    public class SocketServer {
    
        private Session session;
    
        private static Map<String, Session> sessionPool = new ConcurrentHashMap<>();
        private static Map<String, String> sessionIds = new ConcurrentHashMap<>();
    
        public SocketServer() {
        }
    
        @OnOpen
        public void open(Session session, @PathParam(value = "datatransSocket") String datatransSocket) {
            this.session = session;
            sessionPool.put(datatransSocket, session);
            sessionIds.put(session.getId(), datatransSocket);
            System.out.println("websocket-成功");
        }
    
        @OnMessage
        public void onMessage(String message) {
            System.out.println("当前发送人sessionid为" + session.getId() + "发送内容为" + message);
        }
    
        @OnClose
        public void onClose() {
            sessionPool.remove(sessionIds.get(session.getId()));
            sessionIds.remove(session.getId());
        }
    
        @OnError
        public void onError(Session session, Throwable error) {
            error.printStackTrace();
        }
    
        public void sendMessage( String message) {
            Session session = sessionPool.get("datatransSocket");
            if (session == null) {
                return;
            }
            synchronized (session) {
                if (session != null) {
                    try {
                        session.getBasicRemote().sendText(message);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    
        public static int getOnlineNum() {
            return sessionPool.size();
        }
    
        public String getOnlineTUsers() {
            StringBuilder TUsers = new StringBuilder();
            for (String key : sessionIds.keySet()) {
                TUsers.append(sessionIds.get(key)).append("---------");
            }
            return TUsers.toString();
        }
    
        public void sendAll(String msg) {
            //for (String key : sessionIds.keySet()) {
            //    sendMessage(sessionIds.get(key), msg);
            //}
            sendMessage(msg);
        }
    
        public void sendMany(String msg, String[] persons) {
            for (String TUserid : persons) {
                sendMessage(msg);
            }
        }
    }
    SocketServer
  • 相关阅读:
    WebApi 接口参数不再困惑:传参详解
    dataType和contentType的区别
    WaitHandles 的数目必须少于或等于 64 个--任意线程信号量监视
    跨线程调用DataGridView控件
    (转)调整.NET控件WebBrowser的默认浏览器内核版本
    Winform中checklistbox控件的常用方法
    csuoj 残缺的棋盘
    csuoj 你经历过绝望吗?两次! bfs + 优先队列
    csuoj barricade
    csuoj 集训队分组
  • 原文地址:https://www.cnblogs.com/xiangpeng/p/12803124.html
Copyright © 2011-2022 走看看