ServiceStack:通过 WebSocket 选择服务器发送的事件

Posted

技术标签:

【中文标题】ServiceStack:通过 WebSocket 选择服务器发送的事件【英文标题】:ServiceStack: Choice of Server-Sent Events over WebSockets 【发布时间】:2014-08-21 15:12:51 【问题描述】:

正在查看提到新 SSE 功能的最新发行说明。这个功能绝对很棒,而且似乎是与浏览器反向的长轮询。

我对这一切都很陌生,但 WebSockets 似乎是最佳方式,因为它是双向的,而 SSE 只是浏览器的单向方式。另外 IE 不支持 SSE,但在最近的两个或三个版本中支持 WebSockets。

我只是想知道选择 SSE 而不是 WebSockets 的原因。

【问题讨论】:

与您的上一个问题一样,这是题外话,因为您直接向 ServiceStack 团队询问有关他们在 websockets 上使用 SSE 的设计决策的问题; 只有他们可以权威地发言。如前所述,SO 不是直接访问 ServiceStack 的替代联系人。虽然 Mythz 提供了一个很好的答案 (+1),但这个问题应该通过电子邮件或 through their support community 直接向 ServiceStack 提出。 知道了。无论如何,谢谢神话。 【参考方案1】:

支持Server Sent Events的原因是outlined in the Chat demo project:

Server Sent Events (SSE) 是一个优雅的web technology,用于有效地接收来自任何 HTTP 服务器的推送通知。它可以被认为是长轮询和单向 WebSockets 的混合体,并且都包含许多优点:

简单 - 服务器发送事件只是一个长期存在的 HTTP 请求,任何 HTTP 服务器都可以支持 高效 - 每个客户端使用单个 TCP 连接,并且每条消息都避免了 HTTP 连接和标头 often faster than Web Sockets 的开销。 弹性 - 浏览器会自动检测连接中断并自动重新连接 可互操作 - 由于它只是普通的 HTTP,因此可以使用您最喜欢的 HTTP 工具进行自省,甚至可以通过 HTTP 代理工作(缓冲和检查编码已关闭)。 得到很好的支持 - 作为一种网络标准,所有主流浏览器都支持它,除了 IE can be enabled with polyfills。

即这是一个非常简单优雅的Web Standard,具有比 WebSockets 更好的 HTTP 保真度,非常适合在 ServiceStack 的 ASP.NET 和 SelfHosts 中工作的服务器推送通信,无需任何额外的 .NET 依赖项或要求主机 Windows Server 具有 WebSockets支持启用使用。 IE支持can be enabled with polyfills.

WebSockets 可能会在以后得到支持,但这可能需要额外的外部依赖项和Windows Server that supports WebSockets 的要求。

【讨论】:

以上是关于ServiceStack:通过 WebSocket 选择服务器发送的事件的主要内容,如果未能解决你的问题,请参考以下文章

您可以通过命名管道自托管 ServiceStack 吗?

C# Redis之ServiceStack

ServiceStack:添加 Blazor 支持?

通过 ServiceStack api 使用 Linq2Twitter 和缓存的 OAuth 令牌

servicestack VueJS 编译失败

C# Redis分布式锁(基于ServiceStack.Redis)