Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tcp 基于Websocket框架_Tcp_Websocket_Frame - Fatal编程技术网

Tcp 基于Websocket框架

Tcp 基于Websocket框架,tcp,websocket,frame,Tcp,Websocket,Frame,我从中了解到Websocket是基于帧的协议,而不是基于流的协议。但它也说明了为什么WebSocket是基于帧的而不是基于流的?我不知道,就像你一样,我想了解更多,因此如果你有想法,请在下面的回复中随意添加评论和资源。 有人能解释一下在Websocket中使用基于帧的协议有什么好处吗?也许预先存在的答案将有助于为讨论提供一些参考 通过利用帧和基于按摩的协议(与基于流的协议相比),编写面向Web的应用程序变得更容易 发送JSON数据等常见操作变得更加容易,并且不需要每个应用程序都为零碎的消息实现网

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

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

通过利用帧和基于按摩的协议(与基于流的协议相比),编写面向Web的应用程序变得更容易

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


编辑(回复评论)

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

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

相反,WebSocket是基于消息的,并且知道消息数据长度

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

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

为了从流中提取消息“units”,这种“保持数据”是我所指的缓存/缓冲元素。

可能预先存在的答案将有助于为讨论提供一些参考

通过利用帧和基于按摩的协议(与基于流的协议相比),编写面向Web的应用程序变得更容易

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


编辑(回复评论)

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

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

相反,WebSocket是基于消息的,并且知道消息数据长度

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

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


为了从流中提取消息“units”,这种“保持数据”是我所指的缓存/缓冲元素。

谢谢您的回答。我在另一篇帖子上读到了你的答案。您已经提到,在基于流的协议中,我们不知道消息的结尾。(我说的对吗?)?另外,您能否更详细地解释一下网络数据缓存层?它应该在哪一层实现?@WorkingSlave-有关添加的信息,请参阅我的评论。谢谢您的回答。我在另一篇帖子上读到了你的答案。您已经提到,在基于流的协议中,我们不知道消息的结尾。(我说的对吗?)?另外,您能否更详细地解释一下网络数据缓存层?它应该在哪一层实现?@WorkingSlave-有关添加的信息,请参阅我的注释。