webscoket这个一般是运用于聊天场景,我之前做一个项目内容需求是这样的,后端对接一个设备,这个设备新增一个事件的时候会调用后端的接口,然后后端需要发送一个webscoket通知给小程序端用户让他们知悉,话不多说直接上代码。
1、websocket配置类
@Configuration public class WebSocketConfig { /** * 注入一个ServerEndpointExporter,该Bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint */ @Bean public ServerEndpointExporter serverEndpointExporter() { return new ServerEndpointExporter(); } }
2、webscoket工具类
这边前端小程序登录之后需要每隔10s通过webscoket发送一次心跳包给我以证实其在线,我这里规定超过120s没接收到心跳消息即主动断开webscoket连接。使用的是onMessage这个方法
/** * <p> * websocket服务 * </p> @ServerEndpoint(value = "/websocket/{userId}") @Component public class WebSocketService { private static EventService eventService; static { //从 Spring 容器中 获取 startFlowService 对象 eventService = SpringContextUtil.getBean(EventService.class); } private static final Logger log = LoggerFactory.getLogger(WebSocketService.class); /** * 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 */ private static AtomicInteger onlineCount = new AtomicInteger(0); /** * concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。 */ private static ConcurrentHashMap<String, WebSocketClient> webSocketMap = new ConcurrentHashMap<>(); /** * 与某个客户端的连接会话,需要通过它来给客户端发送数据 */ private Session session; /** * 接收userId */ private String userId = null; /** * 连接建立成功调用的方法 */ @OnOpen