Websockets 与反应式套接字

Posted

技术标签:

【中文标题】Websockets 与反应式套接字【英文标题】:Websockets vs Reactive sockets 【发布时间】:2017-12-09 13:47:33 【问题描述】:

我最近遇到了一个术语“反应式套接字”。到目前为止,我一直认为 websockets 是实现完全成熟的异步风格的方式。

那么什么是反应式套接字。

这个链接 (http://rsocket.io/) 甚至谈到了 websockets 的比较。

【问题讨论】:

你能解释一下为什么这个问题被否决了吗? 【参考方案1】:

什么是 RSocket?

RSocket 在网络边界上实现Reactive Streams 规范。它是一种应用程序级通信协议,具有内置的框架、会话恢复和背压功能,可在网络上运行。

RSocket 与传输无关。 RSocket 可以在 Websockets、TCP、HTTP/2 和 Aeron 上运行。

RSocket 与 Websockets 有何不同?

Websockets 不提供应用级背压,仅提供基于 TCP 的字节级背压。 Websockets 也只提供框架,它们不提供应用程序语义。由开发人员来构建与 websocket 交互的应用程序协议。

RSocket 提供框架、应用程序语义、应用程序级背压,并且它不依赖于特定的传输。

有关创建 RSocket 背后的动机的更多信息,请查看 RSocket 网站上的motivations doc。

【讨论】:

gregwhitaker 能否帮助理解什么是应用程序级背压和字节级背压?如果能举例说明就好了。 当然,字节级背压是接收者说“向我发送 x 个字节”的地方。应用程序级背压是接收者说“向我发送 x 个域或请求对象”的地方 动机链接不起作用。这是正确的:rsocket.io/about/motivations【参考方案2】:

WebSocket 和 RSocket 都是具有双向、多路、双工通信的协议。但两者都在不同的层次上工作。

WebSocket 是一种基于 TCP 的底层通信协议。它定义了如何将字节流转换为帧。但是 WebSocket 消息本身并没有关于如何路由或处理它的说明。因此,我们需要在应用层的 websocket 之上运行的消息传递协议,以实现双向通信。

RSocket 是一个完全反应式的应用程序级协议,它运行在 TCP、WebSocket、UDP 等字节流传输上。它提供对网络的应用程序流控制,以防止中断并提高弹性。 RSocket 采用了具有非阻塞背压的异步流处理的思想,其中失败的组件将与其简单地丢弃流量,不如将其压力传达给上游组件,让它们减少负载。

【讨论】:

我希望我能给你多一点,因为这个解释真的很好

以上是关于Websockets 与反应式套接字的主要内容,如果未能解决你的问题,请参考以下文章

EventMachine WebSockets - 订阅 WS 到 EM 频道与保持套接字收集

WebSockets Tutorial(教程一)————WebSockets简介

Flash 中的 WebSocket 与原始 TCP 套接字

Windows Phone 8 中的 Websockets 客户端支持

如何在WebSocket上实现Ajax

对 Microsoft WebSockets 命名空间感到困惑