榆林免费做网站办公空间设计网站

web/2025/9/29 11:39:09/文章来源:
榆林免费做网站,办公空间设计网站,wordpress 报名表单,平面设计图片大全简介 WebSocket 是基于TCP/IP协议#xff0c;独立于HTTP协议的通信协议。WebSocket 连接允许客户端和服务器之间的全双工通信#xff0c;以便任何一方都可以通过已建立的连接将数据推送到另一方。 我们常用的HTTP是客户端通过「请求-响应」的方式与服务器建立通信的#x…简介 WebSocket 是基于TCP/IP协议独立于HTTP协议的通信协议。WebSocket 连接允许客户端和服务器之间的全双工通信以便任何一方都可以通过已建立的连接将数据推送到另一方。 我们常用的HTTP是客户端通过「请求-响应」的方式与服务器建立通信的必须是客户端主动触发的行为服务端只是做好接口被动等待请求。而在某些场景下的动作是需要服务端主动触发的比如向客户端发送消息、实时通讯、远程控制等。客户端是不知道这些动作几时触发的假如用HTTP的方式那么设备端需要不断轮询服务端这样的方式对服务器压力太大同时产生很多无效请求且具有延迟性。于是才采用可以建立双向通讯的长连接协议。通过握手建立连接后服务端可以实时发送数据与指令到设备端服务器压力小。 Spring WebSocket是Spring框架的一部分提供了在Web应用程序中实现实时双向通信的能力。本教程将引导你通过一个简单的例子演示如何使用Spring WebSocket建立一个实时通信应用。 准备工作 确保你的项目中已经引入了Spring框架的WebSocket模块。你可以通过Maven添加以下依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-websocket/artifactId /dependency创建WebSocket配置类实现WebSocketConfigurer接口 首先创建一个配置类用于配置WebSocket的相关设置。 package com.ci.erp.human.config;import com.ci.erp.human.handler.WebSocketHandler; import com.ci.erp.human.interceptor.WebSocketHandleInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;/**** Websocket配置类** author lucky_fd* since 2024-01-17*/ Configuration EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {// 注册websocket处理器和拦截器registry.addHandler(webSocketHandler(), /websocket/server).addInterceptors(webSocketHandleInterceptor()).setAllowedOrigins(*);registry.addHandler(webSocketHandler(), /sockjs/server).setAllowedOrigins(*).addInterceptors(webSocketHandleInterceptor()).withSockJS();}Beanpublic WebSocketHandler webSocketHandler() {return new WebSocketHandler();}Beanpublic WebSocketHandleInterceptor webSocketHandleInterceptor() {return new WebSocketHandleInterceptor();} } 上面的配置类使用EnableWebSocket注解启用WebSocket并通过registerWebSocketHandlers方法注册WebSocket处理器。 registerWebSocketHandlers这个方法是向spring容器注册一个handler处理器及对应映射地址可以理解成MVC的Handler控制器方法websocket客户端通过请求的url查找处理器进行处理 addInterceptors拦截器当建立websocket连接的时候我们可以通过继承spring的HttpSessionHandshakeInterceptor来做一些事情。 setAllowedOrigins跨域设置*表示所有域名都可以不限制 域包括ipport, 指定*可以是任意的域名不加的话默认localhost本服务端口 withSockJS 这个是应对浏览器不支持websocket协议的时候降级为轮询的处理。 创建WebSocket消息处理器实现TextWebSocketHandler 接口 接下来创建一个消息处理器处理客户端发送的消息。 package com.ci.erp.human.handler;import cn.hutool.core.util.ObjectUtil; import com.ci.erp.common.core.utils.JsonUtils; import com.ci.erp.human.domain.thirdVo.YYHeartbeat; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.handler.TextWebSocketHandler;import java.io.IOException; import java.util.HashMap; import java.util.Map;/**** websocket处理类* 实现WebSocketHandler接口** - websocket建立连接后执行afterConnectionEstablished回调接口* - websocket关闭连接后执行afterConnectionClosed回调接口* - websocket接收客户端消息执行handleTextMessage接口* - websocket传输异常时执行handleTransportError接口** author lucky_fd* since 2024-01-17*/public class WebSocketHandler extends TextWebSocketHandler {/*** 存储websocket客户端连接* */private static final MapString, WebSocketSession connections new HashMap();/*** 建立连接后触发* */Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {System.out.println(成功建立websocket连接);// 建立连接后将连接以键值对方式存储便于后期向客户端发送消息// 以客户端连接的唯一标识为key,可以通过客户端发送唯一标识connections.put(session.getRemoteAddress().getHostName(), session);System.out.println(当前客户端连接数 connections.size());}/*** 接收消息* */Overrideprotected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {System.out.println(收到消息: message.getPayload());// 收到客户端请求消息后进行相应业务处理返回结果this.sendMessage(session.getRemoteAddress().getHostName(),new TextMessage(收到消息: message.getPayload()));}/*** 传输异常处理* */Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {super.handleTransportError(session, exception);}/*** 关闭连接时触发* */Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {System.out.println(触发关闭websocket连接);// 移除连接connections.remove(session.getRemoteAddress().getHostName());}Overridepublic boolean supportsPartialMessages() {return super.supportsPartialMessages();}/*** 向连接的客户端发送消息** author lucky_fd* param clientId 客户端标识* param message 消息体**/public void sendMessage(String clientId, TextMessage message) {for (String client : connections.keySet()) {if (client.equals(clientId)) {try {WebSocketSession session connections.get(client);// 判断连接是否正常if (session.isOpen()) {session.sendMessage(message);}} catch (IOException e) {System.out.println(e.getMessage());}break;}}} } 通过消息处理器在开发中我们就可以实现向指定客户端或所有客户端发送消息实现相应业务功能。 创建拦截器 拦截器会在握手时触发可以用来进行权限验证 package com.ci.erp.human.interceptor;import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;import java.util.Map;/**** Websocket拦截器类** author lucky_fd* since 2024-01-17*/public class WebSocketHandleInterceptor extends HttpSessionHandshakeInterceptor {Overridepublic boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, MapString, Object attributes) throws Exception {System.out.println(拦截器前置触发);return super.beforeHandshake(request, response, wsHandler, attributes);}Overridepublic void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception ex) {System.out.println(拦截器后置触发);super.afterHandshake(request, response, wsHandler, ex);} } 创建前端页面客户端 最后创建一个简单的HTML页面用于接收用户输入并显示实时聊天信息。 !DOCTYPE html html langen headmeta charsetUTF-8titleSpring WebSocket Chat/titlescript srchttps://code.jquery.com/jquery-3.6.4.min.js/scriptscript srchttp://cdn.bootcss.com/sockjs-client/1.1.1/sockjs.js/script /head body请输入input typetext idmessage placeholderType your message button onclicksendMessage()Send/button button onclickwebsocketClose()关闭连接/button div idchat/divscriptvar socket null;if (WebSocket in window) {// 后端服务port为22900socket new WebSocket(ws://localhost:22900/websocket/server);} else if (MozWebSocket in window) {socket new MozWebSocket(ws://localhost:22900/websocket/server);} else {socket new SockJS(http://localhost:22900/sockjs/server);}// 接收消息触发socket.onmessage function (event) {showMessage(event.data);};// 创建连接触发socket.onopen function (event) {console.log(event.type);};// 连接异常触发socket.onerror function (event) {console.log(event)};// 关闭连接触发socket.onclose function (closeEvent) {console.log(closeEvent.reason);};//发送消息function sendMessage() {if (socket.readyState socket.OPEN) {var message document.getElementById(message).value;socket.send(message);console.log(发送成功!);} else {console.log(连接失败!);}}function showMessage(message) {document.getElementById(chat).innerHTML p message /p;}function websocketClose() {socket.close();console.log(连接关闭);}window.close function () {socket.onclose();};/script/body /html这个页面使用了WebSocket对象来建立连接并通过onmessage监听收到的消息。通过输入框发送消息将会在页面上显示。 测试结果 后端日志 前端界面 Java客户端 添加依赖 dependencygroupIdorg.java-websocket/groupIdartifactIdJava-WebSocket/artifactIdversion1.4.0/version /dependency创建客户端类继承WebsocketClient package com.river.websocket;import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake;import java.net.URI; import java.net.URISyntaxException;public class MyWebSocketClient extends WebSocketClient {MyWebSocketClient(String url) throws URISyntaxException {super(new URI(url));}// 建立连接Overridepublic void onOpen(ServerHandshake shake) {System.out.println(shake.getHttpStatusMessage());}// 接收消息Overridepublic void onMessage(String paramString) {System.out.println(paramString);}// 关闭连接Overridepublic void onClose(int paramInt, String paramString, boolean paramBoolean) {System.out.println(关闭);}// 连接异常Overridepublic void onError(Exception e) {System.out.println(发生错误);} }测试websocket package com.river.websocket;import org.java_websocket.enums.ReadyState;import java.net.URISyntaxException;/*** author lucky_fd* date 2024-1-17*/ public class Client {public static void main(String[] args) throws URISyntaxException, InterruptedException {MyWebSocketClient client new MyWebSocketClient(ws://localhost:22900/websocket/server);client.connect();while (client.getReadyState() ! ReadyState.OPEN) {System.out.println(连接状态 client.getReadyState());Thread.sleep(100);}client.send(测试数据);client.close();} }参考链接 通过注解方式实现websocketspringboot集成websocket持久连接权限过滤拦截spring websocket实现前后端通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/83876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外贸网站建设 佛山电脑配件电子商务网站设计方案

目录 一、问题描述二、问题复现1.Maven依赖2.application.yml 配置3.DemoController.java4.snowflakePage.html 页面5.DemoControllerAdvice.java 监听6.问题复现 三、原因分析四、问题解决方案一方案二 一、问题描述 Java 后端使用雪花算法生成 Long 类型的主键 ID&#xff0…

网站怎么做网络推广桂林两江四湖景区怎么游览

项目内容这个作业属于哪个课程班级博客这个作业的要求在哪里作业要求我在这个课程的目标是对于人工智能有一定的了解这个作业在哪个具体方面帮助我实现目标能够有平台支持我对于人工智能更加深入的了解与交流作业正文见下其他参考文献无具体作业1、描述你在这门课想要达到的具体…

网页制作与网站建设实战大全 视频无锡网站建设制作

芯片初创公司Etched近日宣布推出了一款针对 Transformer架构专用的AISC芯片 “Sohu”,并声称其在AI大语言模型(LLM)推理性能方面击败了NVIDIA最新的B200 GPU,AI性能达到了H100的20倍。这也意味着Sohu芯片将可以大幅降低现有AI数据…

成都电子商务网站建站二手交易网站怎么做

文章目录 Introlog 及结论代码 Intro 界面设计:点击左侧按钮,会将右侧 青色的RightFragment 替换成 黄色的AnotherRightFragment,而这两个 Fragment 的生命周期方法都会打印日志。 所以只要看执行结果中的日志,就可以知道 Fragme…

专业3合1网站建设北京百度seo工作室

文章目录 🍒题目一 69. x 的平方根🍒解法一🍒解法二🍒题目二 70. 爬楼梯🍒解法一 🍒题目一 69. x 的平方根 🍒解法一 class Solution(object):def mySqrt(self, x):""":type x:…

上海产品网站建设semester at sea

GUI编程 04 贪吃蛇小游戏 4.2 第二步:绘制静态的小蛇 现在绘制静态的小蛇(即小蛇初始位置),并且完善游戏默认初始状态。这一步还在GamePanel类中实现。 首先,定义了小蛇的数据结构, //定义蛇的数据结构int length; //小蛇总长…

女子医院网站设计怎么做做网站需要注意的

今天小站来和各位聊聊date这个熟词。说起date,这可是工作生活中一个极其常用的单词。无论是为下次工作会议定个日期,还是为即将举行的婚礼定个日子,都可以用“fix/set a date for sth”来表示。在沃尔玛等超市购物,经常可以看到食…

网站建设推荐北京华网天下宁波自助建站公司

图的深度遍历 Time Limit: 1000MS Memory Limit: 65536KBSubmit StatisticProblem Description 请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出。遍历时,先遍历节点编号小的。Input 输入第一行为整数n&#xff…

成都手机网站建深圳企业做网站公司哪家好

云虚拟主机是一款虚拟主机产品,云虚拟主机是由云计算与虚拟主机共同产生的,接下来小编就带领大家一起来了解一下云虚拟主机都有哪些作用吧! 云虚拟主机能够通过在多个服务器上分散虚拟机实例,来提高服务器的可用性和冗余备份&…

长沙3合1网站建设网站里的搜索怎么做

致伤工具的推断一直是法医工作中的热点和难点。由于作用位置、作用方式的不同,相同的致伤工具在人体组织上会形成不同的损伤形态,不同的致伤工具也可能形成相同的损伤形态。致伤工具品种繁多、形态各异,但大致可分为两类:锐器&…

网站图片要求世界优秀摄影作品网站

字符串的特点: 1.String是java定义好的一个类,定义在java.lang包里面,所以使用的时候是不需要进行导包的 2.java程序中的所有字符串文字,都被实为此类的对象。也就是说当我们就算是进行赋值,这个也会创造…

网站 解决负载wordpress怎么给产品设置分类

关于html中table表格tr,td的⾼度和宽度 做⽹页的时候经常会遇到各种各样的问题,经常遇到的⼀个就是会碰到表格被内容撑开的问题。 设置table样式为 table-layout: fixed; 宽度可以了,但是高度会被撑高。怎么设置都不行,只能给这个td标签单独…

北京西站附近的景点有哪些故城建设银行网站

java 8 新功能详解注意:确保还检查了我们的详细教程Java 8 Features – ULTIMATE Guide 。 Jdk 1.8(又名Java 8)今天发布,这意味着它的通用发布版本已经公开发售,开发人员可以从早期版本转换为经过测试的版本以用于生…

虚拟网站多少钱百度广告投放价格表

一、Why(Research Background) 网络流量分类根据协议(如超文本传输协议或域名系统)或应用程序(如脸书或Gmail)对流量类别进行分类。其准确性是一些网络管理任务(如服务质量控制、异常检测等)的关键基础。为了进一步提高流量分类的准确性,最近的研究引入了基于深度学习的方法…

电子商务网站的数据库怎么做成都设计公司排行榜

纯虚函数 1.1纯虚函数是在声明虚函数时被“初始化”为0的函数。声明纯虚函数的一般形式为:virtual 函数类型 函数名 (参数列表) 0;如 virtual float area() const 0;1.2纯虚函数没有函数体,而且这是一个声明语句后面应有分号。1.3纯虚函数最后面的“0”并…

江苏个人备案网站内容做网站有关机械的图片

生物统计学抽样分布:n个样本会得到n个统计量,将这n个统计量作为总体,该总体的分布即是抽样分布根据辛钦大数定律,从一个非正态分布的总体中抽取的含量主n的样本,当n充分大时,样本平均数渐近服从正态分布。因…

做群头像的网站在线网上银行登录

题干: 某班有 nn 个同学,每个同学有一个外向程度 a_iai​。由于要进行某个活动,需要把他们分成若干个小组,每个小组的人数至少为 mm 人。不同外向程度的人在一个小组会产生不开心值,定义一个小组的不开心值为组内成员…

响应页手机网站源码企业网站的职能主要有

问题:http访问服务器时没有返回,没有超时,一直在阻塞 处理过程:telnet端口能连上,服务端程序也不存在处理时间过长的情况。 说明tcp连接没问题。推测是客户端连接后再发起请求,服务端阻塞了。因为很多客户…

学校网站建设招标什么叫高端网站定制

文章目录 Ubuntu安装Samba流程Samba配置文件Samba添加账户配置文件修改Samba服务控制设置开机自动启动通过systemctl 启动服务通过 rc.local 启动 Windows访问参考链接 当前文章仅用于记录,在 Ubuntu中安装使用Samba,在Windows访问 系统环境:…

网站作为医院形象建设ui设计培训班需要学几个月

对于自动驾驶的商业化落地来说,这个「性感」的赛道一直备受争议。在过去几年,包括港口、矿山等在内的封闭场景进入商业订单的收获期;但类似干线物流这样的半开放式场景,却喜忧参半。 今年初,作为全球自动驾驶领域的技…