18 | 新特性:Tomcat如何支持WebSocket?
该思维导图由 AI 生成,仅供参考
WebSocket 工作原理
- 深入了解
- 翻译
- 解释
- 总结
Tomcat支持WebSocket的工作原理及实现方式 WebSocket技术在实现Tomcat与浏览器的双向通信方面发挥着重要作用。通过Tomcat的WebSocket API,开发者可以轻松实现WebSocket的功能,包括处理连接、消息传输等。WebSocket的工作原理类似于Socket,通过HTTP协议进行一次握手后,数据就直接从TCP层的Socket传输,与HTTP协议无关。浏览器和服务器在握手时会带上特定的请求头,如果服务器支持WebSocket,会在HTTP响应中加上相应的头部,从而建立WebSocket连接。数据传输以frame形式传输,可以分片传输大数据,提高传输效率。 Tomcat通过SCI机制完成WebSocket加载,构造一个WebSocketContainer实例,将扫描到的Endpoint子类和添加了注解`@ServerEndpoint`的类注册到这个容器中,并且这个容器还维护了URL到Endpoint的映射关系,这样通过请求URL就能找到具体的Endpoint来处理WebSocket请求。当WebSocket的握手请求到来时,Tomcat通过一个特殊的Filter判断该当前HTTP请求是否是一个WebSocket Upgrade请求,如果是,则在HTTP响应里添加WebSocket相关的响应头信息,并进行协议升级。具体来说就是用UpgradeProtocolHandler替换当前的HttpProtocolHandler,相应的,把当前Socket的Processor替换成UpgradeProcessor,同时Tomcat会创建WebSocket Session实例和Endpoint实例,并跟当前的WebSocket连接一一对应起来。这个WebSocket连接不会立即关闭,并且在请求处理中,不再使用原有的HttpProcessor,而是用专门的UpgradeProcessor,UpgradeProcessor最终会调用相应的Endpoint实例来处理请求。 总的来说,Tomcat作为服务器端支持WebSocket,通过特定的配置和实现WebSocket处理器,使得开发者可以灵活地选用WebSocket技术来解决实际工作中的问题,如在线游戏、股票基金实时报价和在线协同编辑等应用场景。WebSocket技术实现了Tomcat与浏览器的双向通信,Tomcat可以主动向浏览器推送数据,
《深入拆解 Tomcat & Jetty 》,新⼈⾸单¥68
全部留言(34)
- 最新
- 精选
- 吃饭饭为了跟现有的 HTTP 协议保持兼容,它通过 HTTP 协议进行一次握手,这里不应该是三次握手吗老师?不太明白这里,求讲解
作者回复: 这里的握手是指应用协议层,不是tcp层。握手的时候tcp连接已经建立,就是http请求里带有websocket的请求头,服务端回复也带有websocket的响应头。
2019-06-2024 - QQ怪之前做过相关websocket服务的相关设计,只要把登陆对象用户标识作为key,websocketsessionid作为value缓存成map集合,通过key找到websocketsessionId发送即可,利用的是spring websocket,但我有一点不太清楚的是:我听说单机tomcat能容纳5万客户端,我不知道为啥会是这个数,为啥不是更多呢?我在开发过程中其实压根就没到过这么大,我想知道是什么因素影响着最大容量数?还有就是想问websocket会不会存在并发问题?希望老师能够解答我的困惑,感谢!!!
作者回复: 5万感觉是Linux上一个进程打开的文件数限制,Linux把Socket也看作是一个文件。 并发数没上去要看资源瓶颈在哪,内存,CPU或者带宽,一般大量链接需要耗费内存,还有就是Tomcat的最大连接数和最大线程数设置大了没有。 你的Websocket应用访问了全局变量就有并发问题,Tomcat层面不会有全局锁的瓶颈。 你说的并发是指线程安全吗,要看websocket
2019-06-2011 - WL老师能否讲一下tomcat在https中如何实现与客户端协商密钥的, 我感觉这个过程比较复杂, 涉及到两边的交互比较多,还有TrustManager的机制也没太看懂.
作者回复: 建议你用openssl s_client -connect www.xxx.com:443,看看ssl握手过程,再结合网上的文章来学习
2019-06-258 - Liam维护一个全局用户连接字典,建立连接时,将用户连接加入字典,发送消息时,从字典获取特定用户的连接并发送 ?
作者回复: 对的
2019-06-205 - andy老师您好,我有个tomcat spring mvc应用,需要提供一个接口供socket连接,我可以直接在应用服务层用netty编写一个监听端口来实现吗
作者回复: 可以的,端口不冲突就行
2019-06-201 - 小满爹老师,请问下对于插拔网线导致连接断开,websocket的服务端或客户端,可以监听到这个事件吗?是不是还需要程序做一些补偿机制?
作者回复: socket连接是TCP传输层负责维护的,WebSocket是应用层协议,实际不管这个。
2019-06-201 - Focused老师,一直不太理解注解的作用及原理,在网上查到注解的目的是标识源代码元素的元数据,是否是源码中通过反射检测到注解后,实现了此注解的实际动作?如何查看此注解的实际动作呢?(描述有点乱,见谅)
作者回复: 是的,查找注解的实际动作可以在代码中全文搜索注解的关键字
2019-06-2021 - Geek_28b75e老师,测试环境遇到一个问题,本项目使用springcloud,网管使用zuul。我在网关路由之前的过滤器添加了一个请求头,添加之后对于一般接口的路由转发是正常的,其中对于文件上传接口,我断点查看,需要好几秒才转发过去,并且报异常,org.apache.tomcat.util.http.fileupload.FileUploadException: Unexpected EOF read on the socket] with root cause java.io.EOFException: Unexpected EOF read on the socket 去掉那个请求头又是正常的,麻烦老师给解惑一下
作者回复: 建议抓包分析
2019-06-21 - Cy190622老师,晚上好。 请教一下, 1.每节都有课后思考题,老师能否在下一节安排解答一下,或者是安排统一的解答章节嘛? 2.netty现在使用很流行。常用在生产上,咱们的课程是否会安排一节,讲一下;如果没有安排的,老师有没有推荐的书籍或者帖子。
作者回复: 后面会有统一的答疑篇,Netty In Action 不错。
2019-06-20 - 杨俊tomcat nodejs在websocket性能上哪个好呢
作者回复: netty最好 :)
2019-06-20