本次將連接人數、發送還是連接的狀態、頁面信息處理加以完善
如果您這邊分開調用理解的不是太好可以借鑑我之前發佈的websocket專題1~5參考查閱(忘記了是否都被髮布)
WSBase java文件 --打印日誌(連接狀態,斷開狀態、發送數據)
import java.io.IOException;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import org.apache.log4j.Logger;
/**
* WebSocket基類
*/
@ServerEndpoint("/wsbase")
public class WSBase {
/**
* Log4j 日誌輸出
*/
private static final Logger log = Logger.getLogger(WSBase.class);
/**
* 客戶端連接會話
*/
private Session session;
/**
* 獲取客戶端連接會話
* @return
*/
public Session getSession() {
return this.session;
}
/**
* 設置客戶端連接會話
* @param session
*/
public void setSession(Session session) {
this.session = session;
}
/**
* 有新連接接入時調用
* @param session
*/
@OnOpen
public void onOpen(@PathParam("clientId") String clientId,Session session){
this.session = session;
/**
* 將當前連接放入到連接池並將在線連接數加1
*/
WebSocketPool.wsSet.add(this);
WebSocketPool.addOnLineCount();
log.info("有新的連接接入,當前在先連接數:" + WebSocketPool.getOnLineCount());
}
/**
* 有連接斷開時調用
*/
@OnClose
public void onClose(){
/**
* 將斷開的連接從連接池中去除並將在線連接數減1
*/
WebSocketPool.wsSet.remove(this);
WebSocketPool.subOnLineCount();
log.info("有連接斷開,當前在先連接數:" + WebSocketPool.getOnLineCount());
}
/**
* 客戶端發送消息時調用
* @param obj
* @param session
*/
@OnMessage
public void onMessage(String msg,Session session){
log.info("接收到客戶端消息:" + msg);
/**
* 將消息廣播發送到所有連接進來的客戶端
*/
for(WSBase item : WebSocketPool.wsSet){
try {
item.sendMessage(msg);
} catch (Exception e) {
log.error(e.getMessage(), e);
continue;
}
}
}
public void sendMessage(String msg) throws IOException{
this.session.getBasicRemote().sendText(msg);
}
}