介绍
今天就跟大家聊聊有关怎么在SpringBoot中使用WebSocket实现前后端消息互传,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
<强>什么是WebSocket吗?强>
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(全双工)通信——允许服务器主动发送信息给客户端。
现在通过SpringBoot集成WebSocket来实现前后端通信。
<强>集成WebSocket实现前后端通信强>
项目代码结构图
& lt; dependency>, & lt; groupId> org.springframework.boot, & lt; artifactId> spring-boot-starter-websocket, & lt;/dependency>
<强>配置WebSocketConfig 强>
启用WebSocket的支持也是很简单,将ServerEndpointExporter对象注入到容器中。
package com.tuhu.websocketsample.configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter; @ configuration public class  WebSocketConfig { ,@ bean public 才能;ServerEndpointExporter  serverEndpointExporter (), { ,,,return new ServerEndpointExporter (); ,,} }
<>强WebSocket服务端WebSocketServer 强>
因为WebSocket是类似客户端服务端的形式(采用ws协议),那么这里的WebSocketServer其实就相当于一个ws协议的控制器。直接@ServerEndpoint (“/websocket"), @ component启用即可,然后在里面实现@OnOpen, @onClose, @onMessage等方法
package com.tuhu.websocketsample.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import javax.websocket。*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.CopyOnWriteArraySet; @ component @ServerEndpoint (“/websocket/{sid}“) @Slf4j public class  WebSocketServer { ,/* * ,,*,静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 ,,*/private 才能static int  onlineCount =, 0; ,/* * ,,*,并发包的线程安全,用来存放每个客户端对应的MyWebSocket对象。 ,,*/private 才能static CopyOnWriteArraySet< WebSocketServer>, webSocketSet =, new CopyOnWriteArraySet<在(); ,/* * ,,*,与某个客户端的连接会话,需要通过它来给客户端发送数据 ,,*/private 才能Session 会话; ,/* * ,,*,接收sid ,,*/private 才能;String  sid=?”; ,/* * ,,*,连接建立成功调用的方法 ,,* */@OnOpen才能 public 才能;void  onOpen (Session 会话,@PathParam (“sid"), String sid), { ,,,this.session =,会话; ,,,//加入组中 ,,,webSocketSet.add(这个); ,,,//在线数加1 ,,,addOnlineCount (); ,,,log.info(“有新窗口开始监听:“+ sid +“,当前在线人数为“,+,getOnlineCount ()); ,,,this.sid=sid; ,,,try { ,,,,,sendMessage(“连接成功“); ,,,},catch (IOException e), { ,,,,,log.error (“websocket  IO异常“); ,,,} ,,} ,/* * ,,*,连接关闭调用的方法 ,,*/@OnClose才能 public 才能;void  onClose (), { ,,,//从组中删除 ,,,webSocketSet.remove(这个); ,,,//在线数减1 ,,,subOnlineCount (); ,,,log.info(“有一连接关闭!当前在线人数为“,+,getOnlineCount ()); ,,} ,/* * ,,*,收到客户端消息后调用的方法 ,,*,@param message 客户端发送过来的消息 ,,* */@OnMessage才能 public 才能;void  onMessage (String 消息,Session 会话),{ null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在SpringBoot中使用WebSocket实现前后端消息互传