当前位置:   article > 正文

WebSocket简介

WebSocket简介

WebSocket API是HTML5中的一大特色,能够使得建立连接的双方在任意时刻相互推送消息,这意味着不同于HTTP,服务器服务器也可以主动向客户端推送消息了。

WebSocket协议是在Http协议的基础上升级而来的。

WebSocket协议建链过程:

Client端需要向服务器端发送一个Http请求,请求头携带Connection: Upgrade以及Upgrade: websocket两字段,用来告知服务器这是一个WebSocket握手请求。

我们可以使用JavaScript代码,发起一个WebSocket链接请求,然后在浏览器F12查看请求信息如下:

服务端收到握手请求后,会返回有Connection和Upgrade字段来表明这是一个WebSocket数据包。响应状态为101.

此时WebSocke链接已经建立,这是一个长连接,我们可以看下F12中websocket的状态:

可以看到Time栏中显示为Pending,等待用户和服务器交互数据了。

此时我们可以在服务端再来看下接收到的请求日志:

(PS: 需要打开debug日志级别,同时需要显示处理握手信息)

  1. 2024-05-23 15:45:39 DEBUG [NioWebSocketHandler] 收到消息:HttpObjectAggregator$AggregatedFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: CompositeByteBuf(ridx: 0, widx: 0, cap: 0, components=0))
  2. GET /websocket HTTP/1.1
  3. Host: localhost:8081
  4. Connection: Upgrade
  5. Pragma: no-cache
  6. Cache-Control: no-cache
  7. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
  8. Upgrade: websocket
  9. Origin: null
  10. Sec-WebSocket-Version: 13
  11. Accept-Encoding: gzip, deflate, br, zstd
  12. Accept-Language: zh-CN,zh;q=0.9
  13. Sec-WebSocket-Key: +iXe1OUXfWR045vV7eEOvA==
  14. Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
  15. content-length: 0

可以看到服务端收到的确实是一个FullHttpRequest请求。

下面看下WebSocket数据交换过程:

客户端浏览器发送数据后,服务端会返回一个响应:

还是在F12的websocket的Messages页中可以看到Client发送和接收的消息

具体的客户端和服务端的代码,可以参考【GitCode - 开发者的代码家园icon-default.png?t=N7T8https://gitcode.com/Siwash/websocketWithNetty/blob/master/README.md】。

 参考:


Java NIO实现WebSocket服务器_nio websocket-CSDN博客

WebSocket协议_js websocket ping-CSDN博客

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号