基于 Websocket 框架
Websocket frame-based
我从 here 了解到 Websocket 是一种基于帧的协议,而不是基于流的协议。但它也指出 为什么 WebSockets 是基于帧而不是基于流的?我不知道,就像你一样,我很想了解更多,所以如果你有想法,请随时在下面的回复中添加评论和资源。
谁能解释一下在 Websocket 中使用基于帧的协议有什么好处?
也许thispre-existing的回答能为讨论提供一些参考。
通过使用框架和基于消息的协议(与基于流的协议相比),可以更轻松地编写面向 Web 的应用程序。
常用操作(例如发送 JSON 数据)变得更容易,并且不需要每个应用程序都为碎片消息实现 network-data buffering/caching 层。
编辑(回复评论)
TCP/IP层保证网络数据包的传递和排序,但没有数据长度的概念——它是一个流协议,它承诺流将按顺序到达,仅此而已。
如果任何数据乱序到达,TCP/IP 协议层将re-order 数据。这可能需要一个内部 cache/buffer 来保留现有数据,同时等待丢失的数据。
相比之下,WebSocket 是基于消息的并且知道消息数据长度。
WebSocket 框架使用 header 数据长度(全部/部分)以允许 WebSocket 协议层将所有数据作为一个单元连接,即使它分布在多个 TCP/IP数据包或(甚至)WebSocket 帧。
这需要协议层将数据保存在内部缓冲区中,直到消息中的所有预期数据都到达。 WebSocket 协议只有在所有数据到达时才会将消息转发给应用程序。
为了从流中提取消息 "units",这个 "holding on to data" 是我所指的 caching/buffering 元素。
我从 here 了解到 Websocket 是一种基于帧的协议,而不是基于流的协议。但它也指出 为什么 WebSockets 是基于帧而不是基于流的?我不知道,就像你一样,我很想了解更多,所以如果你有想法,请随时在下面的回复中添加评论和资源。
谁能解释一下在 Websocket 中使用基于帧的协议有什么好处?
也许thispre-existing的回答能为讨论提供一些参考。
通过使用框架和基于消息的协议(与基于流的协议相比),可以更轻松地编写面向 Web 的应用程序。
常用操作(例如发送 JSON 数据)变得更容易,并且不需要每个应用程序都为碎片消息实现 network-data buffering/caching 层。
编辑(回复评论)
TCP/IP层保证网络数据包的传递和排序,但没有数据长度的概念——它是一个流协议,它承诺流将按顺序到达,仅此而已。
如果任何数据乱序到达,TCP/IP 协议层将re-order 数据。这可能需要一个内部 cache/buffer 来保留现有数据,同时等待丢失的数据。
相比之下,WebSocket 是基于消息的并且知道消息数据长度。
WebSocket 框架使用 header 数据长度(全部/部分)以允许 WebSocket 协议层将所有数据作为一个单元连接,即使它分布在多个 TCP/IP数据包或(甚至)WebSocket 帧。
这需要协议层将数据保存在内部缓冲区中,直到消息中的所有预期数据都到达。 WebSocket 协议只有在所有数据到达时才会将消息转发给应用程序。
为了从流中提取消息 "units",这个 "holding on to data" 是我所指的 caching/buffering 元素。