通过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
原文地址:https://www.cnblogs.com/xiangxiang521/p/9376471.html