当前位置: 首页 > news >正文

简单学习 --> WebSocket

websocket

websocket 是应用层 协议, 基于传输层Tcp 协议 的协议 ;

这个协议可以实现服务器主动给客户端推送信息功能(本身Tcp就可以做到,但是HTTP不行)

websocket报文格式

websocket 和服务器建立连接的过程

首先 客户端 发送 HTTP请求 给服务器 , 请求里 包含了一些特殊header , (告诉 服务器 要不要和我升级成 websocket) ,

服务器 也会 返回响应给 客户端, (同意升级 ) , 这样客户端和服务器就建立了 websocket的 连接, 后续就使用 websocket 进行传输;

就 跟 HTTP没关系了 ;

websocket 的使用

在java有两种形式使用功能 websocket

  1. 使用Tomcat 提供的 websocket.api

  2. 使用Spring 提供的 websocket.api

使用websocket 例子
  1. 服务器代码(首先引入websocket依赖)

  2. 客户端代码(使用js)

服务器
  1. 创建 类 继承TextSocketHandler 类, 重写主要的4个方法 (TextsocketHandler类,websocket支持文本和二进制,这里这个就代表支持文本的类)

  2. 把上面的类注册到Spring(交给Spring管理)

  3. 配置路由(关联路径对应上面的 创建的websocketHandler 类)

创建websocke类

返回响应

把创建的websocket 类的实例注册到Spring

配置路由
  1. 实现 接口

  2. 注册路径

  3. 有@EnableWebsocket

客户端

js的 websocket, 的 send () 发送方法 , 只能 发送 字符串 , 所有要发送json数据要把json转成json字符串

在处理前端和后端请求可以使用:

JSON.stringify(json数据): 把json对象转成json字符串

JSON.parse () : 把json字符串转成json

前端使用 js 写 , 和服务器处理的流程一样: 1.连接成功 2. 收到消息 3. 连接异常 ,4. 连接关闭 ;

<body> <input type="text" id="text"> <button id="send-button">发送</button> <script> // 通过js ,创建Websocket对象 ; // 创建对象需要有路径 , 就是 websocket 传输消息的路径 , 对应服务器的路径, 就是发送信息给服务器 ; // ws : 代表的是 协议名称 , ws 就是websocket let websocket = new websocket('ws://127.0.0.1:8080/test') ; ​ // 给 websocket 创建几个 回调函数 ; websocket.onopen = function(){ // 连接建立成功后, 自动调用 ; console.log("连接建立成功"); } ​ websocket.onmessage = function(e){ // 收到消息后 ,调用 // 这里的 e 参数 , 就是 收到的消息 ; console.log("收到消息"+e.data); } ​ websocket.onerror = function(){ // 链接发生异常时 ,调用 console.log("连接发生异常"); } ​ websocket.onclose = function(){ // 连接发生关闭后调用 console.log("连接断开了"); } // 给上面的 发送按钮,添加一个 发送点击事件, 把消息发送出去; let sendButton = document.querySelector("#send-button") ; let message = document.querySelector('#text'); sendButton.onclick = function(){ // 发送消息 ,前面已经有 websocket , websocket 已经有服务器的信息, 可以直接通过它向服务器发送数据 ; // 客户端就不需要会话的概念了 , 只需要知道服务器就行,服务器才需要管理会话 ; websocket.send(message.value) ; } ​ ​ </script> </body>
服务器-客户端交互

http://www.jsqmd.com/news/811496/

相关文章:

  • 处理后文风变成小学生作文?嘎嘎降AI学术语感训练保留论证逻辑! - 我要发一区
  • Evotown——开启本地化、可验证的AI智能体进化新时代
  • iPad协议开发老哥的避坑指南
  • BilibiliVideoDownload跨平台视频下载工具:从安装到高级配置的完整指南
  • Angular 17与Firebase全栈实战:从零构建现代化Web应用
  • 2026年必看!AI大模型API加速站深度剖析,诗云API(ShiyunApi)等平台推荐
  • 工具说合格线对齐其实卡你35%阈值?嘎嘎降AI 20%阈值真兜底! - 我要发一区
  • 朋友推荐的便宜降AI工具其实是坑?嘎嘎降AI明码4.8元不绕弯! - 我要发一区
  • 赛博朋克整合包下载(画质MOD+功能MOD+美化MOD+车辆MOD)大型整合包下载2026最新分享
  • Multi-Agent 落地常见问题:数据质量、模型适配与业务对齐解决方案
  • 从论文复现到算法创新:我是如何利用VRP标准算例搞定实验对比的
  • 2026 手拉葫芦厂家实力排名 业内公认靠谱品牌精选,防爆手拉葫芦,国标手拉葫芦,三角手拉葫芦,圆形手拉葫芦 手扳葫芦,不锈钢手扳葫芦 - 品牌优企推荐
  • 本地部署9B代码智能体:基于vLLM与CoPaw-Flash的实践与深度评估
  • Source Han Serif CN 开源字体深度解析:从技术架构到高效应用的完整指南
  • 在VS Code中结合Taotoken实现稳定的AI编程辅助体验
  • 电力规约101/104协议实战:用C语言手把手解析CP56Time2a时间戳(附完整代码)
  • DESeq2实战:从数据导入到差异基因筛选全流程解析
  • 别再让树莓派吃灰了!用腾讯云轻量服务器+frp,5分钟搞定远程SSH和VNC访问
  • PyQt5实战:从Designer拖拽到打包exe,手把手打造你的第一个多页面桌面应用
  • 3分钟掌握RPG Maker资源解密:纯前端工具轻松破解加密文件
  • 13. 最大子数组和
  • 终极指南:用ContextMenuManager彻底解决Windows右键菜单混乱问题
  • 改进A*路径规划与动态避障决策【附程序】
  • 南京家长请家教,避开这些坑:从预算制定到老师核验的全流程指南 - 教育资讯板
  • 从收音机到5G:OFDM技术的前世今生,以及它为何成为Wi-Fi和5GNR的基石
  • 改进A*融合机器人路径规划应用【附仿真】
  • 微信视频号直播数据采集终极指南:解锁实时弹幕与礼物监控能力
  • 3个核心功能解密:PT-Plugin-Plus如何实现PT站点种子下载效率提升
  • 【claude code agent 实践7】后台任务机制深度解析: 从S02到S08的演进
  • HiveWE:终极魔兽争霸III地图编辑器完全指南