<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
<version>${websocket.version}</version>
</dependency>
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* @author lizw
*/
@Component
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
import lombok.extern.slf4j.Slf4j;
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.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
/**
* @author lizw
*/
@Component
@ServerEndpoint("/websocket")
@Slf4j
public class WebSocket {
private Session session;
//此处要用static修饰,形成线程间共享
private static final CopyOnWriteArraySet<WebSocket> webSockets = new CopyOnWriteArraySet<>();
@OnOpen
public void open(Session session){
this.session = session;
webSockets.add(this);
log.info("【WebSocket有新的连接】size={}",webSockets.size());
}
@OnClose
public void close(){
webSockets.remove(this);
log.info("【WebSocket断开连接】size={}",webSockets.size());
}
/**
* client send message to server
* @param message 消息体
*/
@OnMessage
public void acceptMessage(String message){
log.info("【WebSocket消息】收到客户端消息",message);
}
public void sendMessage(String message){
for (WebSocket webSocket : webSockets){
log.info("【websocket消息】广播消息, message={}", message);
try {
webSocket.session.getBasicRemote().sendText(message);
} catch (IOException e) {
e.printStackTrace();
log.error("【WebSocket发送消息】消息发送异常 message={}",message);
}
}
}
}