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

猜测Tomcat如何实现WebSocket协议

一、WebSocket协议的实现
(一)WebSocket是官方的协议接口标准。

(二)如果一门编程语言可以网络连接和并发,就能创建一种WebSocket实现。

(三)同一种编程语言,有不同的协议实现版本和框架。


二、Tomcat实现
在Tomcat容器中实现了对应的WebSocket版本,比较难使用。

(一)需要实现官方接口的实现类。
1、实现javax.websocket.Session接口,实现里面的抽象方法。
需要在子类中定义java.net.Socket类型的成员变量来和客户端通信,读取和接收数据。

2、Tomcat需要用java.net.ServerSocket监听端口,获取来自客户端的连接。
需要用输入输出流来接收和发送二进制数据。
需要判断是否为WebSocket请求,只有满足要求才能调用程序处理。


(二)需要用反射来加载用@ServerEndpoint修饰的类,生成对象。

这些类是用户开发的Websocket通信程序,代表着用户设计的通信逻辑。


(三)每次获得连接需要验证和握手,握手通过后创建和java.net.Socket类的对象相关的会话对象。

该会话对象是javax.websocket.Seesion接口的子类实例。


(四)每次需要根据接收的数据单位,调用事件处理方法,传入接收的数据和参数。

从用户设计的程序中得到监听对象,根据对应注解(例如@OnOpen)来获取方法对象,得到方法参数列表,根据列表来准备参数,调用方法。

1、第一次连接验证通过后,调用@OnOpen修饰的方法。

2、当读取到来自客户端的数据时,需要根据@OnMessage修饰的方法来调用,把数据传递。

3、当读取到是关闭数据包,调用@OnClose修饰的方法。

4、当在数据读取和发送中出现错误,调用@OnError修饰的方法,把错误对象传递该方法。

http://www.lryc.cn/news/374755.html

相关文章:

  • uniApp @input事件更改输入框值,值改变了但是页面没更新新的值
  • 两行css 实现瀑布流
  • Centos7.9部署单节点K8S环境
  • 【CV】stable diffusion初步理解
  • 足底筋膜炎最好的恢复办法
  • Fiddler抓包工具介绍
  • 知乎号开始运营了,宣传一波
  • Go 基础丨切片 slice
  • 哪个牌子充电宝好用?精选四大热门款充电宝品牌!公认好用
  • WPF/C#:如何将数据分组显示
  • leetcode 200 岛屿数量
  • ​1:25万基础电子地图(江西版)
  • 【RabbitMQ】初识 RabbitMQ
  • Qt QListView自定义树状导航控件
  • Java 数组的全面解析与应用
  • Thinkphp起名网宝宝起名网站源码
  • 【解决方案】【最佳实践】React高阶组件中Refs 不会被传递的问题
  • SRAM和DRAM
  • 浅析Spring中Async注解底层异步线程池原理
  • sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置
  • AIGC新秀亮相,哪款大模型产品最得你心?
  • RabbitMQ消息的可靠传输和防止消息丢失
  • .net8系列-图文并茂手把手教你使用Nlog记录.net日志
  • 课时158:脚本发布_简单脚本_远程执行
  • 3dmax2025能用云渲染吗?2025最新云渲染渲染100使用方法
  • 从零开始学GeoServer源码(一)(搭建开发环境Win10+IDEA23.3.5+jdk11+geoserver2.24.x)
  • 分类模型:MATLAB判别分析
  • 生产 的mybatisplus 日志输入到日志文件
  • 八分钟生成一篇两万字的文章演示——《基于灰色预测的人口预测模型》
  • golang 透明底图转白底