原文鏈接:https://www.dubby.cn/detail.html?id=9102
實(shí)現(xiàn)代碼
依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
啟動(dòng)類
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
配置
@Configuration
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Bean
public ServerEndpointExporter serverEndpointExporter (){
return new ServerEndpointExporter();
}
}
WebSocket
@ServerEndpoint("/websocket")
@Component
public class MyWebSocket {
private static AtomicLong onlineCount = new AtomicLong();
private static ConcurrentHashMap<String, Session> webSocketMap = new ConcurrentHashMap<>();
@OnOpen
public void onOpen(Session session) {
webSocketMap.put(session.getId(), session);
System.out.println("有新鏈接加入!當(dāng)前在線人數(shù)為:\t" + onlineCount.incrementAndGet());
}
@OnClose
public void onClose(Session session) {
webSocketMap.remove(session.getId());
System.out.println("有一鏈接關(guān)閉!當(dāng)前在線人數(shù)為:\t" + onlineCount.decrementAndGet());
}
@OnMessage
public void onMessage(String message, Session session) throws IOException {
System.out.println("收到消息:\t" + message);
if (message.contains("#")) {
String[] msgMap = message.split("#");
String targetId = msgMap[0];
String msg = String.format("[%s]:\t%s", session.getId(), msgMap[1]);
session.getBasicRemote().sendText(message + "[self]");
// 單發(fā)消息
for (Session item : webSocketMap.values()) {
if (item.getId().equals(targetId)) {
sendMessage(item, msg);
}
}
} else {
String msg = String.format("[%s]:\t%s", session.getId(), message);
session.getBasicRemote().sendText(msg + "[自己]");
// 群發(fā)消息
for (Session item : webSocketMap.values()) {
if (!item.getId().equals(session.getId())) {
sendMessage(item, msg);
}
}
}
}
private void sendMessage(Session session, String message) throws IOException {
session.getBasicRemote().sendText(message);
}
}
Github地址
https://github.com/dubby1994/web-socket
結(jié)果截圖
第0個(gè)客戶端
image
第1個(gè)客戶端
image
第2個(gè)客戶端
image
服務(wù)端
image