websocket 是基于流还是基于包的协议?

     2023-03-14     218

关键词:

【中文标题】websocket 是基于流还是基于包的协议?【英文标题】:Is websocket a stream-based or package-based protocol? 【发布时间】:2014-01-28 05:41:30 【问题描述】:

想象一下,我有服务器和客户端通过 WebSocket 进行通信。每次发送另一块数据。不同的块可能有不同的长度。

我可以保证,如果服务器在一次调用中发送块,那么客户端将在一次message 回调中接收它,反之亦然?即,WebSocket 是否具有嵌入的“打包”功能,所以我不必关心我的数据在传输过程中是否在多个回调中拆分?

【问题讨论】:

***.com/q/21024173/632951 , ***.com/a/13011241/632951 【参考方案1】:

WebSocket 是一种基于消息的协议,因此如果您发送一个数据块作为 WebSocket 消息的有效负载,对等方将收到一个单独的 WebSocket 消息,其中该数据块作为有效负载。

【讨论】:

我有兴趣在 2022 年左右在 Firefox 和 Chrome 中具体确认这种行为。碰巧知道吗? 是的,仍然是这样,因为任何 JavaScript 可用的浏览器中的 API 仍然相同,并且该 API 是基于 WebSocket 消息的,您用于观察 WebSocket 连接的 JavaScript 回调会按 - websocket 消息。没有 API(据我所知)可以获取单个 WebSocket 帧、单个 TCP/TLS 段或单个 IP 数据包。【参考方案2】:

理论上,WebSocket 协议是一种基于消息的协议。但是,请记住...

WebSocket 消息由一个或多个帧组成。 帧可以是完整的帧,也可以是分段的帧。 消息本身在协议中没有内置任何长度指示,只有帧有。 帧的有效负载长度最多可达 9,223,372,036,854,775,807 字节(因为协议允许使用 63 位长度指示符)。 分段的主要目的是允许在消息启动时发送大小未知的消息,而无需缓冲该消息。

所以...

单个 WebSocket“消息”可以包含无限数量的 9,223,372,036,854,775,807 字节片段。

这可能会使实现难以始终通过其 API 向您传递完整的消息...

因此,在一般情况下,您的问题的答案是 WebSocket 协议是基于消息的协议,您不必手动构建消息。您用于使用该协议的 API 可能具有适当的消息大小限制(以允许它保证消息作为单个块传送),或者可能提供流接口以允许无限大小的消息。

我在标准化过程中对此大喊大叫here。

【讨论】:

陈词滥调(大约 2011 年),大多数观点都没有实际意义,无效,或者现在在 websocket 的各种实际实现中得到解决。 好吧,我认为我们同意不同意,除非您喜欢评论相关博客文章并指出它现在不正确的地方;然后我们可以讨论。实现 CAN 和 DO 提出了自己的解决方法(例如消息大小限制)这一事实并没有减损协议规范允许上述行为的事实,恕我直言,这是不幸的,应该/当时本来可以处理的。 我想所有参与这里讨论的都是我所谓的网络和 WebSocket 专家;)但我想向其他读者指出一件事:我想值得区分 API协议。 WebSocket API 可以在不同级别公开 WebSocket:每条消息、每帧或流。即使使用流式 API,实现也可以暴露消息边界。在任何情况下,WebSocket 协议本身都是基于消息(和帧)的。它需要保留消息边界 - 但不是帧边界。 确实如此。然而,最初的问题通过询问实现如何将消息传递给用户代码而使水变得有点混乱。

浅析websocket劫持

WebSocket是HTML5推出的新协议,是基于TCP的应用层通信协议,它与http协议内容本身没有关系。WebSocket也类似于TCP一样进行握手连接,跟TCP不同的是,WebSocket是基于HTTP协议进行的握手,它在客户端和服务器之间提供了一个基于单TCP... 查看详情

使用python多进程进行基于websocket的实时视频流处理

文章大纲websocket简介使用python进行推流操作多进程处理与参数解析页面htmldemo实现多路的显示问题多路推送的实现如何做到延时更低呢?使用框架进行低延迟推流使用深度学习推理过程中,多进程方式下CPU和GPU的不同学习路径与... 查看详情

使用python多进程进行基于websocket的实时视频流处理

文章大纲websocket简介使用python进行推流操作多进程处理与参数解析页面htmldemo如何做到延时更低呢?参考文献websocket简介HTTP协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端... 查看详情

websocketssl加密浅析

参考技术AWebSocket是基于Http协议的改进,Http为无状态协议,基于短连接,需要频繁的发起请求,第二Http只能客户端发起请求,服务端无法主动请求。都是基于TCP的应用层协议。都使用Request/Response模型进行连接的建立。在连接的... 查看详情

单击一次即可基于单个 websocket 流设置两个状态变量

】单击一次即可基于单个websocket流设置两个状态变量【英文标题】:Settwostatevariablesbasedonasinglewebsocketstreamonasingleclick【发布时间】:2021-12-0321:29:31【问题描述】:该应用正在传输价格数据。我想单击一个按钮,在单击按钮时打印... 查看详情

基于websocket协议的研究demo

1、日志推送 websocket在线测试WebSocket在线测试工具物联网http://www.websocket-test.com/2、Springboot+vue的聊天:Springboot+websocket+vue的web聊天项目https://gitee.com/xzlmk/spring_boot_vue_chat 3、实时通信  4、基于C#net4.5实现最 查看详情

基于websocket协议的研究demo

1、日志推送 websocket在线测试WebSocket在线测试工具物联网http://www.websocket-test.com/2、Springboot+vue的聊天:Springboot+websocket+vue的web聊天项目https://gitee.com/xzlmk/spring_boot_vue_chat 3、实时通信  4、基于C#net4.5实现最简单的websocket... 查看详情

Apache CXF 中基于 WebSocket 的 SOAP?

】ApacheCXF中基于WebSocket的SOAP?【英文标题】:SOAPoverWebSocketsinApacheCXF?【发布时间】:2014-04-0907:04:13【问题描述】:CXF是否支持将WebSockets作为传输协议?我需要支持多路复用的SOAP和WebSocket协议作为起点看起来很完美。它是一种双... 查看详情

聊天功能插件socket.io(代码片段)

...Socket.io是什么  是基于时间的实时双向通讯库  基于websocket协议的  前后端通过时间进行双向通讯  配合express快速开发实时应用二、Socket.io和ajax区别  基于不同的网络协议  ajax基于http协议,单向,实时获取数据... 查看详情

基于 WebSocket 协议的 AWS IoT MQTT

】基于WebSocket协议的AWSIoTMQTT【英文标题】:AWSIoTMQTToverWebSocketProtocol【发布时间】:2016-05-2214:12:41【问题描述】:我一直在关注AWSIoT文档,尝试开始使用MQTT教程,网址为http://docs.aws.amazon.com/iot/latest/developerguide/protocols.html#mqtt-ws在... 查看详情

http和websocket协议

websocket是一个新的基于TCP的应用层协议,只需要一次连接,以后的数据不需要重新建立连接,可以直接发送,它是基于TCP的,属于和HTTP相同的地位,通过消息的方式触发。HTTPHTTP的地址格式如下:http_URL="http:""//"host[":"port][abs_path["... 查看详情

websocket(基于tcp的全双工通信协议)

参考技术AWebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSockets它可以在用户的浏览器和服务器之间打开交互式通信会话。使用此API,可以向服务器发送消息并接收事件驱动的响应,而无需通过轮询服务器的方式以获得... 查看详情

基于serverless与websocket的聊天工具实现(代码片段)

传统业务实现Websocket并不难,然而函数计算基本上都是事件驱动,不支持长链接操作。如果将函数计算与API网关结合,是否可以有Websocket的实现方案呢?API网关触发器实现WebsocketWebSocket协议是基于TCP的一种新的网络协议。它实现... 查看详情

webrtc和websocket的区别

...输层协议,而HTTP是应用层的协议。在这三者之间,SPDY和WebSocket都是与HTTP相关的协议,而TCP是HTTP底层的协议。WebSocket则提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,以取代网页和服务器采用HTTP轮询进行双向通... 查看详情

qt-websockets

参考技术AWebSocket是基于Web的协议,旨在在客户端应用程序和远程主机之间实现双向通信。如果初始握手成功,它将使两个实体来回发送数据。WebSocket是应用程序通过较少的网络延迟和最少的数据交换来获取实时数据源的解决方... 查看详情

基于socket实现websocket服务(代码片段)

websocket原理首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说。HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了。在HTTP... 查看详情

WebSocket 是不是与 HTTP/3 兼容

】WebSocket是不是与HTTP/3兼容【英文标题】:IsWebSocketcompatiblewithHTTP/3WebSocket是否与HTTP/3兼容【发布时间】:2019-08-0614:20:38【问题描述】:即将到来的HTTP/3标准不再基于TCP,而是基于QUIC协议。WebSocket基于TCP,作为HTTP更新启动。WebSoc... 查看详情

wireshark文档阅读笔记-websocket协议基本概念(代码片段)

WebSocketWebSocket是基于TCP的全双工协议。WebSocket是2011年IETFRFC6455中定义的标准,他的API是W3C定义的。WebSocket不仅适用于浏览器、服务端的程序,还适用于客户端、服务端的程序。WebSocket是基于TCP的协议。WebSocket让服务器和... 查看详情