竹子林网站建设,新能源网站建设哪家好,网上购物系统的设计与实现论文,sql数据库查询网站模板1、WebSocket简介 WebSocket是一种网络通信协议#xff0c;可以在单个TCP连接上进行全双工通信。它于2011年被IETF定为标准RFC 6455#xff0c;并由RFC7936进行补充规范。在WebSocket API中#xff0c;浏览器和服务器只需要完成一次握手#xff0c;两者之间就可以创建持久性…1、WebSocket简介 WebSocket是一种网络通信协议可以在单个TCP连接上进行全双工通信。它于2011年被IETF定为标准RFC 6455并由RFC7936进行补充规范。在WebSocket API中浏览器和服务器只需要完成一次握手两者之间就可以创建持久性的连接并进行双向数据传输。这使得客户端和服务器之间的数据交换变得更加简单并允许服务端主动向客户端推送数据。
2、服务端环境搭建 服务端基于SpringBoot实现首先引入对应的jar包然后进行ServerEndpointExporter配置然后再定义了一个WebSocket操作类最后编写了一个测试的类WebSocketController一个普通的Controller类。
2.1、maven依赖
!-- websocket 依赖 --
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactId
/dependency2.2、配置类WebSocketConfig ServerEndpointExporter是Spring框架中的一个类主要用于在Spring Boot应用中启动和管理WebSocket服务器端点。 在Spring Boot内置容器嵌入式容器中运行时必须由ServerEndpointExporter提供ServerEndpointExporter bean它会在启动时自动扫描和注册应用中的WebSocket端点。 注意在Tomcat等其他容器中运行时容器的扫描工作会由容器自己处理不需要手动注入ServerEndpointExporter bean即不需要该配置
Configuration
public class WebSocketConfig {/*** 注入ServerEndpointExporter* 这个bean会自动注册使用了ServerEndpoint注解声明的Websocket endpoint*/Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}
}2.3、WebSocket操作类 WebSocket操作类定义了WebSocket中的onOpen()、onMessage()、onClose()、onError()等方法同时提供了一个发送广播全部订阅用户和点对点信息的方法。 1、这里ServerEndpoint(“/api/websocket/{userId}”)中的定义可以根据自己的需要进行修改因为我的项目里使用了SpringSecurity了为了避免登录鉴权这里使用“/api/**”配置了免登陆Api。后续会继续完善需要登录鉴权的使用方式。 2、这里的WebSocket操作类每次建立 WebSocket 连接时就会初始化一个新的 bean。这是由于 WebSocket 是一种双向的、长时间的通信机制它需要维护每个连接的状态处理每个从客户端发来的消息并根据这些消息生成响应消息发送回客户端。因此为每个 WebSocket 连接创建一个单独的 bean 是必要的这样可以让 Spring Boot 为每个连接提供必要的管理和生命周期控制。这种方式也可以使用单例模式实现后续再更新相关用法。 Component
Slf4j
ServerEndpoint(/api/websocket/{userId})
public class WebSocket {//与某个客户端的连接会话需要通过它来给客户端发送数据private Session session;//用户IDprivate String userId;//concurrent包的线程安全Set用来存放每个客户端对应的MyWebSocket对象。//虽然Component默认是单例模式的但springboot还是会为每个websocket连接初始化一个bean所以可以用一个静态set保存起来。private static CopyOnWriteArraySetWebSocket webSockets new CopyOnWriteArraySet();// 用来存在线连接用户信息private static ConcurrentHashMapString,Session sessionPool new ConcurrentHashMapString,Session();/*** 链接成功调用的方法*/OnOpenpublic void onOpen(Session session, PathParam(valueuserId)String userId) {try {this.session session;this.userId userId;webSockets.add(this);sessionPool.put(userId, session);log.info(WebSocket消息有新的连接总数为:webSockets.size());} catch (Exception e) {log.error(WebSocket异常-链接失败(onOpen)原因 e.getMessage());}}/*** 链接关闭调用的方法*/OnClosepublic void onClose() {try {webSockets.remove(this);sessionPool.remove(this.userId);log.info(WebSocket消息连接断开总数为:webSockets.size());} catch (Exception e) {log.error(WebSocket异常-链接关闭失败(onClose)原因 e.getMessage());}}/*** 收到客户端消息后调用的方法** param message*/OnMessagepublic void onMessage(String message) {log.info(WebSocket消息收到客户端消息:message);}/** 发送错误时的处理* param session* param error*/OnErrorpublic void onError(Session session, Throwable error) {log.error(用户错误,原因:error.getMessage());log.error(WebSocket异常-错误信息(onError)原因 error.getMessage());}// 此为广播消息public void sendAllMessage(String message) {log.info(WebSocket消息-广播消息:message);for(WebSocket webSocket : webSockets) {try {if(webSocket.session.isOpen()) {webSocket.session.getAsyncRemote().sendText(message);}} catch (Exception e) {log.error(WebSocket异常-广播消息异常(sendAllMessage)原因 e.getMessage());}}}// 此为单点消息public void sendOneMessage(String userId, String message) {Session session sessionPool.get(userId);if (session ! null session.isOpen()) {try {log.info(WebSocket消息-点对点消息:message);session.getAsyncRemote().sendText(message);} catch (Exception e) {log.error(WebSocket异常-点对点消息异常(sendOneMessage)原因 e.getMessage());}}}}2.4、测试类WebSocketController 这个测试类主要是为了测试发送信息后页面可以自动更新。至此服务端的配置就完成了。
Controller
RequestMapping(/api/msg)
public class WebSocketController {Resourceprivate WebSocket webSocket;RequestMapping(/all/{msg}) // 将消息发送到/topic/greetings路径下public void all(PathVariable String msg) {//创建业务消息信息JSONObject obj new JSONObject();obj.put(msg, msg);//消息内容//全体发送webSocket.sendAllMessage(obj.toJSONString());}RequestMapping(/{userId}/{msg}) // 将消息发送到/topic/greetings路径下public void sendUser(PathVariable String userId,PathVariable String msg) {//创建业务消息信息JSONObject obj new JSONObject();obj.put(msg, msg);//消息内容webSocket.sendOneMessage(userId, obj.toJSONString());}}3、前端环境搭建 前端是基于Vue实现具体代码如下
templatediv classorder-listspanTestMsg:{{ message }}/span/div
/template
script
export default {name: HomeView,data() {return {message:}},components: {},created() {},mounted() {//初始化websocketthis.initWebSocket()},destroyed: function () { // 离开页面生命周期函数this.websocketclose();},computed: {},methods: {initWebSocket: function () { // 建立连接var userId test//this.COMMON.getStorage(user);//对应ServerEndpoint(/api/websocket/{userId})中的地址var url ws://ip:port/项目名/api/websocket/ userId;this.websock new WebSocket(url);this.websock.onopen this.websocketonopen;this.websock.send this.websocketsend;this.websock.onerror this.websocketonerror;this.websock.onmessage this.websocketonmessage;this.websock.onclose this.websocketclose;},// 连接成功后调用websocketonopen: function () {console.log(WebSocket连接成功);},// 发生错误时调用websocketonerror: function (e) {console.log(WebSocket连接发生错误 JSON.stringify(e));},// 给后端发消息时调用websocketsend: function (e) {console.log(WebSocket连接发生错误 JSON.stringify(e));},
// 接收后端消息// vue 客户端根据返回的cmd类型处理不同的业务响应websocketonmessage: function (e) {this.message data;},// 关闭连接时调用websocketclose: function (e) {console.log(connection closed ( e.code ));}},}
/script
style langscss/style4、测试 至此我们就完成了WebSocket的服务端和前端的环境搭建首先启动后台服务然后启动前端服务进入上述页面这个时候就会建立起来链接然后访问“http://localhost:8803/qriver-lab/api/msg/test/6666”其中test对应的是userId6666是msg信息这个时候就会发现页面会自动显示6666不需要进行刷新。 文章转载自: http://www.morning.pjjkz.cn.gov.cn.pjjkz.cn http://www.morning.mwcqz.cn.gov.cn.mwcqz.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.sgrwd.cn.gov.cn.sgrwd.cn http://www.morning.jzkqg.cn.gov.cn.jzkqg.cn http://www.morning.tmtrl.cn.gov.cn.tmtrl.cn http://www.morning.qkqzm.cn.gov.cn.qkqzm.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.csgwd.cn.gov.cn.csgwd.cn http://www.morning.fhwfk.cn.gov.cn.fhwfk.cn http://www.morning.jnkng.cn.gov.cn.jnkng.cn http://www.morning.jrsgs.cn.gov.cn.jrsgs.cn http://www.morning.qzmnr.cn.gov.cn.qzmnr.cn http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn http://www.morning.hphfy.cn.gov.cn.hphfy.cn http://www.morning.nclps.cn.gov.cn.nclps.cn http://www.morning.pqwhk.cn.gov.cn.pqwhk.cn http://www.morning.fldrg.cn.gov.cn.fldrg.cn http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn http://www.morning.fyxr.cn.gov.cn.fyxr.cn http://www.morning.pqryw.cn.gov.cn.pqryw.cn http://www.morning.tzkrh.cn.gov.cn.tzkrh.cn http://www.morning.qywfw.cn.gov.cn.qywfw.cn http://www.morning.mlbn.cn.gov.cn.mlbn.cn http://www.morning.jzfrl.cn.gov.cn.jzfrl.cn http://www.morning.ypcbm.cn.gov.cn.ypcbm.cn http://www.morning.rnkq.cn.gov.cn.rnkq.cn http://www.morning.ssxlt.cn.gov.cn.ssxlt.cn http://www.morning.gfqj.cn.gov.cn.gfqj.cn http://www.morning.bxch.cn.gov.cn.bxch.cn http://www.morning.ylqrc.cn.gov.cn.ylqrc.cn http://www.morning.bztzm.cn.gov.cn.bztzm.cn http://www.morning.dpdr.cn.gov.cn.dpdr.cn http://www.morning.lcmhq.cn.gov.cn.lcmhq.cn http://www.morning.gtxrw.cn.gov.cn.gtxrw.cn http://www.morning.gllhx.cn.gov.cn.gllhx.cn http://www.morning.ypjjh.cn.gov.cn.ypjjh.cn http://www.morning.srhqm.cn.gov.cn.srhqm.cn http://www.morning.nypgb.cn.gov.cn.nypgb.cn http://www.morning.wjlkz.cn.gov.cn.wjlkz.cn http://www.morning.qrpx.cn.gov.cn.qrpx.cn http://www.morning.gfmpk.cn.gov.cn.gfmpk.cn http://www.morning.homayy.com.gov.cn.homayy.com http://www.morning.mlntx.cn.gov.cn.mlntx.cn http://www.morning.qysnd.cn.gov.cn.qysnd.cn http://www.morning.rmrcc.cn.gov.cn.rmrcc.cn http://www.morning.hxxzp.cn.gov.cn.hxxzp.cn http://www.morning.yxlpj.cn.gov.cn.yxlpj.cn http://www.morning.jhkzl.cn.gov.cn.jhkzl.cn http://www.morning.rpfpx.cn.gov.cn.rpfpx.cn http://www.morning.tlbdy.cn.gov.cn.tlbdy.cn http://www.morning.drrt.cn.gov.cn.drrt.cn http://www.morning.yfnhg.cn.gov.cn.yfnhg.cn http://www.morning.nyqm.cn.gov.cn.nyqm.cn http://www.morning.wpjst.cn.gov.cn.wpjst.cn http://www.morning.kcypc.cn.gov.cn.kcypc.cn http://www.morning.plpqf.cn.gov.cn.plpqf.cn http://www.morning.mcbqq.cn.gov.cn.mcbqq.cn http://www.morning.czgtt.cn.gov.cn.czgtt.cn http://www.morning.blfll.cn.gov.cn.blfll.cn http://www.morning.czcbl.cn.gov.cn.czcbl.cn http://www.morning.mhnd.cn.gov.cn.mhnd.cn http://www.morning.gzzncl.cn.gov.cn.gzzncl.cn http://www.morning.trjdr.cn.gov.cn.trjdr.cn http://www.morning.qmbtn.cn.gov.cn.qmbtn.cn http://www.morning.wpmlp.cn.gov.cn.wpmlp.cn http://www.morning.pbtdr.cn.gov.cn.pbtdr.cn http://www.morning.mbdbe.cn.gov.cn.mbdbe.cn http://www.morning.mcpby.cn.gov.cn.mcpby.cn http://www.morning.nccqs.cn.gov.cn.nccqs.cn http://www.morning.rkjz.cn.gov.cn.rkjz.cn http://www.morning.rgfx.cn.gov.cn.rgfx.cn http://www.morning.tktyh.cn.gov.cn.tktyh.cn http://www.morning.slpcl.cn.gov.cn.slpcl.cn http://www.morning.nwjzc.cn.gov.cn.nwjzc.cn http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn http://www.morning.wgrm.cn.gov.cn.wgrm.cn http://www.morning.zfgh.cn.gov.cn.zfgh.cn http://www.morning.wjrq.cn.gov.cn.wjrq.cn http://www.morning.hrydl.cn.gov.cn.hrydl.cn