此为系列文章,对MSDN ASP.NET Core SignalR 的官方文档进行系统学习与翻译。其中或许会添加本人对 ASP.NET Core 的浅显理解。
SignalR 是什么
ASP.NET Core SignalR是一个开源的库,其简化了向app添加实时web功能的操作。实时web功能使得服务端代码可以不断的向客户端推送内容。
SignalR的适用场景:
- 需要从服务器进行高频更新的apps,比如游戏,社交网络,选举,竞拍,地图以及GPS 程序。
- 面板以及监控程序。比如公司面板,持续的销售记录更新,以及旅行提示。
- 协作性的app。比如白板程序,团队会议软件都是协作性app的例子。
- 需要通知的app。社交网络,邮件,聊天,游戏,旅行提示以及其他许多app都需要通知功能。
SignalR提供了API用来创建服务端到客户端的RPC。RPCs从服务端的.NET Core 代码调用客户端的JavaScript 函数。
这里有一些ASP.NET Core SignalR的相关特性:
- 自动处理链接管理。
- 向所有已连接的客户端同时发送消息。比如,聊天室。
- 向特定的客户端或者分组发送消息。
- 可伸缩性以处理渐渐增加的访问压力。
其源码寄宿在 SignalR repository on GitHub。
传输
SignalR支持如下的技术以处理实时连接(以优先使用的顺序排序):
- WebSockets
- 服务端发送事件
- 长轮询
SignalR总是在服务端和客户端的能力范围内自动选择最好的传输方法。
中心(Hubs)
SignalR使用 中心 来在客户端和服务端进行通信。
中心 是一个高级别的管道,其允许服务端和客户端来相互调用对方的方法。SignalR自动处理跨越机器边界的调度,其允许客户端调用服务端的代码,反之亦然。你可以传递强类型的参数给方法,并且其支持模型绑定。SignalR提供了两种内置的 中心 协议:基于JSON的文本协议以及基于MessagePack 的二进制协议。与JSON相比,MessagePack通常会产生更小的消息。较老的浏览器必须支持XHR level 2 以提供对 MessagePack 协议的支持。
中心通过发送包含客户端方法的名称及参数的消息来调用客户端代码。作为方法参数的对象会使用已配置的协议进行反序列化。客户端 尝试将名称与客户端代码的方法进行匹配。当客户端找到一个匹配时,它会调用这个方法,并将反序列化后的参数数据传给这个方法。
额外资源