首页 > 解决方案 > 基于 Websocket 框架

问题描述

我从这里读到Websocket 是基于帧的协议,而不是基于流的协议。但它也说明了为什么 WebSockets 是基于帧而不是基于流的?我不知道,就像你一样,我很想了解更多,所以如果你有想法,请随时在下面的回复中添加评论和资源。
谁能解释在 Websocket 中使用基于帧的协议有什么好处?

标签: tcpwebsocketframe

解决方案


也许这个预先存在的答案将有助于为讨论提供一些参考。

通过利用帧和基于消息的协议(相对于基于流的协议),它可以更轻松地编写面向 Web 的应用程序。

发送 JSON 数据等常见操作变得更加容易,并且不需要每个应用程序都为碎片消息实现网络数据缓冲/缓存层。


编辑(回答评论)

TCP/IP 层保证网络数据包的传递和排序,但没有数据长度的概念——它是一个流协议,它承诺流将按顺序到达,仅此而已。

如果任何数据无序到达,TCP/IP 协议层将对数据重新排序。这可能需要一个内部缓存/缓冲区,在等待丢失数据的同时保留现有数据。

相比之下,WebSocket 是基于消息的,并且知道消息数据的长度。

WebSocket 帧使用具有数据长度(全部/部分)的标头,以允许 WebSocket 协议层将所有数据连接为一个单元,即使它分布在多个 TCP/IP 数据包或(甚至)WebSocket 帧中。

这要求协议层将数据保存在内部缓冲区中,直到消息中的所有预期数据都到达。WebSocket 协议只有在其全部数据到达时才会将消息转发给应用程序。

为了从流中提取消息“单元”而“保留数据”是我所指的缓存/缓冲元素。


推荐阅读