首页 > 解决方案 > SignalR 和 Pusher 的区别

问题描述

我想创建一个使用 React 作为前端技术的 Web 应用程序。该应用程序的一个要求是服务器将能够使用有关更改的信息更新所有客户端(不必是精确的实时,但应在不超过 10 秒后更新)。

像客户端每隔几秒钟从服务器请求更新的解决方案是不可能的。

要求:

1) 服务器应该使用 .NET 或 Node.js 来实现。

2) 必须通过 IIS 的端口 443 保护连接。

我阅读了一些有关 Micorsoft 的SignalR信息Pusher Channels,并且似乎提供了我需要的那种服务。

您能否详细说明它们之间究竟有什么区别?我应该什么时候选择每个?他们谁得到了更多的社区支持?哪个更容易实现?类似的东西...

标签: signalrpusher

解决方案


SignalR 和 Pusher Channel 最终都使用 websocket 向客户端传递消息,因此两者都应该满足您向客户端实时传递消息的要求。

1) 两种产品也满足您对两种库支持的要求:

SignalR 支持 .NET:

https://dotnet.microsoft.com/apps/aspnet/signalr

Pusher Channels 对 nodejs 和 .NET 都有服务器支持:

https://github.com/pusher/pusher-http-node

https://github.com/pusher/pusher-http-dotnet

2) 两种产品都满足您通过 TLS/WSS 发送消息的要求:

信号R:

https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html

推送渠道:

保护 Pusher 的消息

就它们之间的差异而言,这取决于您的实现,如果您只是在自己的 ISS 服务器上运行 SignalR,那么您将负责管理所有的 websocket 连接以及随之而来的所有扩展挑战。

然而,与 Channels 的工作方式类似,SignalR 也有一个托管的 websocket 服务,因此您不需要管理连接或缩放。您只需使用要发送到 Channels 或 SignalR 的消息发出 API 请求,然后将此消息广播到通过 websockets 连接的感兴趣的客户端。在这种情况下,您不需要自己管理 websocket 连接。

然而,就定价而言,Channels 似乎更具竞争力(尤其是免费产品),因此,如果您正在查看托管产品,Channels 似乎是一个更好的价值主张:

https://azure.microsoft.com/en-gb/pricing/details/signalr-service/

https://pusher.com/channels/pricing

两种产品在实现方面看起来都非常相似(假设您使用的是托管服务)。如果在 ISS 上实现 SignalR,复杂性会增加:

https://docs.microsoft.com/en-us/aspnet/core/signalr/scale?view=aspnetcore-2.2

在支持方面,Pusher 提供免费的应用程序支持服务:

https://support.pusher.com/hc/en-us

希望这可以帮助!


推荐阅读