<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); } } } }
原文:https://www.cnblogs.com/xiaowenwen/p/14528863.html