本次将连接人数、发送还是连接的状态、页面信息处理加以完善
如果您这边分开调用理解的不是太好可以借鉴我之前发布的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);
}
}
网友评论