【问题标题】:Websocket frame-based基于 Websocket 框架
【发布时间】:2018-10-27 01:25:52
【问题描述】:

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

【问题讨论】:

    标签: tcp websocket frame


    【解决方案1】:

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

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

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


    编辑(回复评论)

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回答。我在另一篇文章中阅读了您的回答。所以你提到在基于流的协议中,我们不知道消息的结尾。 (我说得对吗?)但是 TCP/IP 层的责任难道不是重新排序流吗?另外,你能解释一下网络数据缓存层的更多细节吗?应该在哪一层实现?
    • @WorkingSlave - 有关添加信息,请参阅我的评论。
    猜你喜欢
    • 2012-12-05
    • 1970-01-01
    • 2012-02-19
    • 2010-09-06
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    相关资源
    最近更新 更多