码迷,mamicode.com
首页 > Web开发 > 详细

初识websocket

时间:2018-07-27 12:03:28      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:open   VID   parse   put   调用   user   数据   sop   open()   

通过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);
            }
        }
}

页面就不放了

初识websocket

标签:open   VID   parse   put   调用   user   数据   sop   open()   

原文地址:https://www.cnblogs.com/xiangxiang521/p/9376471.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!