通过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);
}
}
}
页面就不放了
原文:https://www.cnblogs.com/xiangxiang521/p/9376471.html