1.引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2.编写配置文件
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
@Component
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
3.编写WebSocket服务
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
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 java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
@Component
@Slf4j
@ServerEndpoint("/screen/webSocket/{sid}")
public class WebSocketServer {
private Session session;
private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();
private String sid;
@OnOpen
public void onOpen(Session session, @PathParam("sid") String sid) {
this.session = session;
webSocketSet.add(this);
this.sid = sid;
log.info("[WebSocket消息]有新的连接,总数:{}", webSocketSet.size());
}
@OnClose
public void onClose() {
webSocketSet.remove(this);
log.info("[WebSocket消息]连接断开,总数:{}", webSocketSet.size());
}
@OnMessage
public void onMessage(String message) {
log.info("[WebSocket消息]收到客户端发来的消息:{}", message);
}
public void sendMessage(String message, String sid) {
for (WebSocketServer webSocket : webSocketSet) {
log.info("[WebSocket消息]向客户端发送消息:message={}", message);
try {
if (StringUtils.equals(webSocket.sid, sid)) {
webSocket.session.getBasicRemote().sendText(message);
}
} catch (IOException e) {
log.info("WebSocket 出错了!!!");
e.printStackTrace();
}
}
}
}