简单几步,在spring-boot项目中配置和实现websocket的服务端和html客户端:
org.springframework.boot
spring-boot-starter-websocket
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
@ServerEndpoint("/my-websocket")
@Component
public class MyWebSocket {
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
private static int onlineCount = 0;
private static CopyOnWriteArraySet webSocketSet = new CopyOnWriteArraySet<>();
private Session session;
@OnOpen
public void onOpen(Session session) throws IOException{
this.session = session;
webSocketSet.add(this);
incrOnlineCount();
for(MyWebSocket item : webSocketSet){
if(!item.equals(this)) { //send to others only.
item.sendMessage("someone just joined in.");
}
}
logger.info("new connection...current online count: {}", getOnlineCount());
}
@OnClose
public void onClose() throws IOException{
webSocketSet.remove(this);
decOnlineCount();
for(MyWebSocket item : webSocketSet){
item.sendMessage("someone just closed a connection.");
}
logger.info("one connection closed...current online count: {}", getOnlineCount());
}
@OnMessage
public void onMessage(String message, Session session) throws IOException {
logger.info("message received: {}", message);
// broadcast received message
for(MyWebSocket item : webSocketSet){
item.sendMessage(message);
}
}
public void sendMessage(String message) throws IOException {
this.session.getBasicRemote().sendText(message);
}
public static synchronized int getOnlineCount(){
return MyWebSocket.onlineCount;
}
public static synchronized void incrOnlineCount(){
MyWebSocket.onlineCount++;
}
public static synchronized void decOnlineCount(){
MyWebSocket.onlineCount--;
}
}
My WebSocket
Welcome To My WebSocket.