Browse Source

增加websocket

master
453530270@qq.com 2 years ago
parent
commit
e875b04478
  1. 15
      src/main/java/app/bcms/jchat/config/WebSocketConfig.java
  2. 7
      src/main/java/app/bcms/jchat/websocket/ChatSocket.java
  3. 65
      src/main/java/app/bcms/jchat/websocket/WebSocketManager.java
  4. 43
      src/main/java/app/bcms/jchat/websocket/WebSocketServer.java

15
src/main/java/app/bcms/jchat/config/WebSocketConfig.java

@ -0,0 +1,15 @@
package app.bcms.jchat.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
//开启WebSocket的支持,并把该类注入到spring容器中
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}

7
src/main/java/app/bcms/jchat/websocket/ChatSocket.java

@ -0,0 +1,7 @@
package app.bcms.jchat.websocket;
/**
* 聊天soket
*/
public class ChatSocket {
}

65
src/main/java/app/bcms/jchat/websocket/WebSocketManager.java

@ -0,0 +1,65 @@
package app.bcms.jchat.websocket;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.websocket.Session;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* WebSocketServer管理类
*/
public class WebSocketManager {
private final static Log log = LogFactory.getLog(WebSocketManager.class);
private final static CopyOnWriteArraySet<WebSocketServer> webSocketServerSet = new CopyOnWriteArraySet<>();
private final static ConcurrentHashMap<String, WebSocketServer> webSocketServerMap = new ConcurrentHashMap<>();
public static void addWebSocketServer(WebSocketServer webSocketServer){
if (webSocketServer != null){
webSocketServerSet.add(webSocketServer);
webSocketServerMap.put(webSocketServer.getSessionId(), webSocketServer);
}
}
public static void removeWebSocketServer(WebSocketServer webSocketServer){
webSocketServerSet.remove(webSocketServer);
webSocketServerMap.remove(webSocketServer.getSessionId());
}
/**
* 通过SessionId发送消息给特定用户
* @param
* @param msg
*/
public static void sentToUser(String sessionId, String msg){
Session session = webSocketServerMap.get(sessionId).getSession();
sentToUser(session, msg);
}
/**
* 通过Session发送消息给特定用户
* @param session
* @param msg
*/
public static void sentToUser(Session session, String msg){
if (session == null){
log.error("不存在该Session,无法发送消息");
return;
}
session.getAsyncRemote().sendText(msg);
}
/**
* 发送消息给所有用户
* @param msg
*/
public static void sentToAllUser(String msg){
for (WebSocketServer webSocketServer : webSocketServerSet) {
sentToUser(webSocketServer.getSession(), msg);
}
log.info("向所有用户发送WebSocket消息完毕,消息:"+ msg);
}
}

43
src/main/java/app/bcms/jchat/websocket/WebSocketServer.java

@ -0,0 +1,43 @@
package app.bcms.jchat.websocket;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import javax.websocket.*;
public class WebSocketServer {
private final static Log log = LogFactory.getLog(WebSocketServer.class);
private Session session;
@OnOpen
public void onOpen(Session session) {
this.session = session;
WebSocketManager.sentToUser(session, "WebSocket is connected!");
WebSocketManager.addWebSocketServer(this);
log.info("与SessionId:"+session.getId()+"建立连接");
}
@OnClose
public void onClose() {
WebSocketManager.removeWebSocketServer(this);
log.info("WebSocket连接关闭");
}
@OnMessage
public void onMessage(String message, Session session) {
log.info("来自SessionId:"+session.getId()+"的消息:{}"+message);
}
@OnError
public void onError(Session session, Throwable error) {
log.error("Session:"+session.getId()+"的WebSocket发生错误"+error);
}
public Session getSession() {
return session;
}
public String getSessionId() {
return session.getId();
}
}
Loading…
Cancel
Save