zoukankan      html  css  js  c++  java
  • 初识websocket

    通过websocket实现发送地理位置

    pom.xml

           <!-- json -->
        <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>fastjson</artifactId>
             <version>1.2.6</version>
           </dependency>
    
        <!--websocket -->
        <dependency>
            <groupId>javax.websocket</groupId>
            <artifactId>javax.websocket-api</artifactId>
            <version>1.1</version>
            <scope>provided</scope>
        </dependency>

    UserDate是发送数据的实体类

    public class UserData {
        private String userId;
        private float lng;
        private float lat;
        
        
        public String getUserId() {
            return userId;
        }
        public float getLng() {
            return lng;
        }
        public float getLat() {
            return lat;
        }
        
        public void setUserId(String userId) {
            this.userId = userId;
        }
        public void setLng(float lng) {
            this.lng = lng;
        }
        public void setLat(float lat) {
            this.lat = lat;
        }
        
        @Override
        public String toString() {
            return "UserData [userId=" + userId + ", lng=" + lng + ", lat=" + lat
                     + "]";
        }
    }

     websocketTest具体代码

    @ServerEndpoint("/websocket/{userId}")
    public class WebSocketTest{
        
            private static ConcurrentHashMap<String,UserData> webSocketMap = new ConcurrentHashMap<String,UserData>(); 
            // 与某个客户端的连接会话,需要通过它来给客户端发送数据
            private Session session;
            
            /**
             * 连接建立成功调用的方法
             * @param session 可选的参数。session为与某个客户端的连接会话,通过它来给客户端发送数据
             * */
            @OnOpen  
            public void onOpen(Session session,@PathParam("userId")String  userId){
                
                if(userId==null){
                    return;
                }
                UserData data = webSocketMap.get(userId);
                if(data==null){
                    data = new UserData();
                    data.setUserId(userId);
                    webSocketMap.put(userId, data);
                }
            } 
            
            /**
             * 连接关闭时调用的方法
             * */
            @OnClose  
            public void onClose(@PathParam("userId")String  userId){ 
                for (String key : webSocketMap.keySet()) {  
                    if(key.equals(userId)){
                        webSocketMap.remove(userId);
                    }
                } 
            }  
            
            /**
             * 收到客户端消息后调用的方法
             * @param message 客户端发送的消息
             * @param session 可选的参数
             * */
             @OnMessage
                public void onMessage(String message, Session session) {
                    System.out.println("来自客户端的消息:" + message);
                  /* 
                    try {
                        sendMessage(message,session);
                    } catch (IOException e) {
                        e.printStackTrace();
                    
                    }*/
    
                    JSONObject jo = JSONObject.parseObject(message);
                    String userId = (String) jo.get("userId");
                    UserData data =new UserData();
                    data.setLat(jo.getFloatValue("lat"));
                    data.setLng(jo.getFloatValue("lng"));
                    data.setUserId(userId);
                    webSocketMap.put(userId, data);
                    
                         try {
                             sendMessage(JSON.toJSONString(webSocketMap),session);
                         } catch (IOException e) {
                             e.printStackTrace();
                         }
                }
            
            public void sendMessage(String message,Session session) throws IOException{
                if(session.isOpen()){
                    session.getAsyncRemote().sendText(message);
                }
            }
    }

    页面就不放了

    大家觉得不错的话可以支持一下

  • 相关阅读:
    mongodb数据类型
    Pycharm2020.1 破解教程
    酱茄主题(资讯/社区WordPress主题)正式发布
    WordPress社区商城小程序“酱茄pro小程序”V1.7.8发布
    SpringBoot 的@Value注解真是太强了,谁用谁说爽!
    python3_String复习
    Core Data的简单实用
    git submodule
    区间修改主席树
    快速数论变换ntt
  • 原文地址:https://www.cnblogs.com/xiangxiang521/p/9376471.html
Copyright © 2011-2022 走看看