gpt4 book ai didi

tcp - websocket 是基于流还是基于包的协议(protocol)?

转载 作者:可可西里 更新时间:2023-11-01 02:30:27 26 4
gpt4 key购买 nike

假设我有服务器和客户端通过 WebSocket 进行通信。每次发送另一 block 数据。不同的 block 可能有不同的长度。

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

最佳答案

理论上,WebSocket 协议(protocol)提供了一个基于消息的协议(protocol)。但是,请记住...

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

所以...

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

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

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

我在标准化过程中对此大发雷霆here .

关于tcp - websocket 是基于流还是基于包的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21024173/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com