springmvc+websocket 框架搭建
阿新 • • 發佈:2019-01-23
package com.cuit.secims.mw.ws;
import java.util.ArrayList;
import java.util.Map;
import org.apache.log4j.Logger;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
public class MyWebSocketHandler implements WebSocketHandler{
private static final Logger log = Logger.getLogger(MyWebSocketHandler.class);
// 儲存所有的使用者session
private static final ArrayList<WebSocketSession> users = new ArrayList<WebSocketSession>();
// 連線 就緒時
@Override
public void afterConnectionEstablished(WebSocketSession session)
throws Exception {
log.info("connect websocket success.......");
users.add(session);
}
// 處理資訊
@Override
public void handleMessage(WebSocketSession session,
WebSocketMessage<?> message) throws Exception {
Gson gson = new Gson();
// 將訊息JSON格式通過Gson轉換成Map
// message.getPayload().toString() 獲取訊息具體內容
Map<String, Object> msg = gson.fromJson(message.getPayload().toString(),
new TypeToken<Map<String, Object>>() {}.getType());
log.info("handleMessage......."+message.getPayload()+"..........."+msg);
// session.sendMessage(message);
// 處理訊息 msgContent訊息內容
TextMessage textMessage = new TextMessage(msg.get("msgContent").toString(), true);
// 呼叫方法(傳送訊息給所有人)
sendMsgToAllUsers(textMessage);
}
// 處理傳輸時異常
@Override
public void handleTransportError(WebSocketSession session,
Throwable exception) throws Exception {
// TODO Auto-generated method stub
}
// 關閉 連線時
@Override
public void afterConnectionClosed(WebSocketSession session,
CloseStatus closeStatus) throws Exception {
log.info("connect websocket closed.......");
users.remove(session);
}
@Override
public boolean supportsPartialMessages() {
// TODO Auto-generated method stub
return false;
}
// 給所有使用者傳送 資訊
public void sendMsgToAllUsers(WebSocketMessage<?> message) throws Exception{
for (WebSocketSession user : users) {
user.sendMessage(message);
}
}
}