基于 tomcat 的 WebSocket 实现
这种方式需要 tomcat 7.x,JEE7 的支持。
首先创建一个 springboot 项目,在 pom.xml 中导入 websocket 所需要的依赖
org.springframework
spring-websocket
5.0.12.RELEASE
复制代码
然后开启 WebSocket 的自动注册(如果使用的是独立的 servlet 容器,而不是 spring boot 的内置容器,就不需要注入这个,它将由容器自己提供和管理)
package com.example.demowebsocket.demowebsocket.socket;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* @author yuanyiwen
* @create 2019-12-03 18:38
* @description
*/
@Configuration
public class WebSocketConfig{
@Bean
public ServerEndpointExporter serverEndpointExporter(){
return new ServerEndpointExporter();
}
}
复制代码
然后就可以创建 WebSocket 服务端啦!主要在于两个部分 :
通过注解 @ServerEndpoint 来声明实例化 WebSocket 服务端
通过注解 @OnOpen、@OnMessage、@OnClose、@OnError 来声明回调函数
package com.example.demowebsocket.demowebsocket.socket;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.TextMessage;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @author yuanyiwen
* @create 2019-12-03 18:48
* @description
*/
@ServerEndpoint(value = "/demoSocket/{userId}")
@Component
public class SocketServer{
/