signalr - SignalR 和 Pusher 的区别
问题描述
我想创建一个使用 React 作为前端技术的 Web 应用程序。该应用程序的一个要求是服务器将能够使用有关更改的信息更新所有客户端(不必是精确的实时,但应在不超过 10 秒后更新)。
像客户端每隔几秒钟从服务器请求更新的解决方案是不可能的。
要求:
1) 服务器应该使用 .NET 或 Node.js 来实现。
2) 必须通过 IIS 的端口 443 保护连接。
我阅读了一些有关 Micorsoft 的SignalR
信息Pusher Channels
,并且似乎提供了我需要的那种服务。
您能否详细说明它们之间究竟有什么区别?我应该什么时候选择每个?他们谁得到了更多的社区支持?哪个更容易实现?类似的东西...
解决方案
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
推送渠道:
就它们之间的差异而言,这取决于您的实现,如果您只是在自己的 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
希望这可以帮助!
推荐阅读
- java - Spring Boot默认连接池tomcat属性不起作用
- javascript - 除非被迫,否则 Vue 不会更新计算
- sql - 是否可以将两个 SQL (MS Access) 查询合并为一个?
- c# - 如果使用 TransactionScope,则无法从 Azure VM 访问 Azure DB
- c# - c和c#之间的共享函数
- c# - 有没有办法可以设置它,以便用户在使用 VPN 时不必在其用户名前加上公司域名 (cn) 进行身份验证?
- php - 如何使用 AND 和 OR 条件创建 php 标签搜索字段?
- python - 匹配两个二维数组的行并使用 numpy 获取行索引映射
- java - 如何使用 LocalDateTime java 检查最小和最大时间,即最小 10:00 和最大时间 10:30
- node.js - 我如何测试 node.js 模板渲染在开玩笑