SignalR 是什么?
SignalR 是一个面向 ASP.NET 开发人员的库, 可简化将实时 web 功能添加到应用程序的过程. 实时 Web 功能是让服务器代码将内容推送到连接的客户端立即可用, 而不是让服务器等待客户端请求新数据的能力.
SignalR 是一个集成的客户端与服务器库, 基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说, 该对话可不受限制地进行单个无状态请求 / 响应数据交换; 它将继续, 直到明确关闭. 对话通过永久连接进行, 允许客户端向服务器发送多个消息, 并允许服务器做出相应答复, 值得注意的是, 还允许服务器向客户端发送异步消息. 是一个完全基于客户及服务器端解决方案, 它是以 JS 作为客户端和 ASP.NET 作为服务端来创建这类的应用.
传统 HTTP 采用的是大家熟知的 "拉模式", 即客户端发出的每次请求, 服务端都是被动处理. 此场景下客户端是老大, 很显然只有一方主动, 操作与处理起来就没那么完美. 为了能让服务端也能主动, html5 的出现让这种变得可能, 大家知道 html5 中有两种主动模式. 第一种叫做 websockect,WebSockets 是 Html5 提供的新的 API, 可以在 Web 网页与服务器端间建立 Socket 连接, 它是基于 tcp 模式的双工通讯. 还有一种叫做 SSE, 也就是客户端来订阅服务器的一种事件模型. 在 html5 出来之前, 如果要做到服务器主动, 我们只能采用变相的 longpool 和 iframe 流勉强实现. 这就相当于要实现服务端的主动就有了 4 种方案. SignalR 的出现是我们每位开发者的福音. 它对上面四种方案进行了高度的封装, 也就是说 signalR 会在这四种技术中根据浏览器和服务器设置采取最优的一种模式.
对于. NET 开发者的福音,.NET 平台为我们提供了一种简洁高效智能的实时信息交互技术 ->SignalR, 它集成了上述数种技术, 并能根据配置自动或手动选择其最佳应用.
可以用 SignalR 做什么?
SignalR 可用于将任何类型的 "实时"Web 功能添加到 ASP.NET 应用程序. 比如最常用的即时消息, 聊天. 只要用户刷新 Web 页面以查看新数据或页面实现长轮询若要检索新数据, 可以考虑对它使用 SignalR. 包括仪表板和监视应用程序, 协作应用程序 (如同时进行编辑的文档), 作业的进度更新到并实时窗体.
SignalR 还可以用于需要高频率从服务器中更新的全新类型 Web 应用程序, 例如在线聊天, 实时游戏, 天气, 股票信息更新等实时应用程序.
SignalR 提供一个简单的 API, 用于创建从服务器端. NET 代码中调用 JavaScript 函数在客户端浏览器 (和其他客户端平台) 的服务器到客户端的远程过程调用 (RPC). SignalR 还包括连接管理的 API (例如, 连接和断开连接事件), 并对连接进行分组.
SignalR 自动处理连接管理, 并允许您同时将消息广播到所有连接的客户端, 如聊天室. 还可以将消息发送到特定的客户端. 客户端和服务器之间的连接是持久性的.
SignalR 与常用的 Web 浏览器上请求 - 响应模式不同, 它支持 "服务器推送" 功能, 可以调用远程过程调用 (RPC).
SignalR 应用程序可以横向扩展到数千个客户端使用服务总线, SQL Server 或 Redis.
最重要的是 SignalR 是开放源代码, 有兴趣的朋友可以研究 SignalR https://github.com/signalr
SignalR 和 WebSocket
前面对 SignalR 已经有了一个非常全面而清晰的认识, 对于 SignalR 和 WebSocket 关系, 我们需要看下什么是 WebSocket?
WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通讯的协议, 目前 Chrome,Firefox,Opera,Safari 等主流版本均支持, Internet Explorer 从 10 开始支持. 另外因为 WebSocket 提供浏览器一个原生的 socket 实现, 所以直接解決了 Comet 架构很容易出错的问题, 而在整個架构的复杂度上也比传统的实现简单得多.
WebSocket 本质上是一个基于 TCP 的持久化协议, 相对于 HTTP 这种非持久的协议来说, 它能够更好的节省服务器资源和带宽, 并且真正实现实时通信. 其优点在前面我们已经做了对比, 最大的缺点就是对旧版本浏览器不支持. 至此 SignalR 的出现, 完美的解决了种浏览器的问题, SignalR 不仅可以实现 WebSocket 的所有功能, 还对旧版本浏览器做了支持. SignalR 可自动或手动选择使用 WebSocket 传输还是其他替代方式传输, 以实现实时 Web 技术.
SignalR 简化了构建实时应用的过程, 它包括了一个 Asp .Net 服务器端库和一个 JS 端库, 集成了数种常见的消息传输方式, 如 long polling,WebSocket, 并提供相应的 API 供开发人员选择如何调用, 帮助其可以简单快速地实现客户端与服务器端相互间的实时通信.
当环境条件合适时, SignalR 将 WebSocket 作为底层传输方式的优先实现, 当然, 它也能很高效地回退到其他技术. 同时, SignalR 提供了非常良好的 API 以供远程调用 (RPC) 浏览器中的 JS 代码.
当 WebSockets 可用时 (即浏览器支持 Html5)SignalR 使用 WebSockets, 当浏览器不支持时 WebSockets 时, SignalR 将使用其它技术来保证达到相同效果.
浏览器和客户端之间想要进行 WebSocket 通信的话, 从一开始的握手阶段, 就要从 HTTP 协议升级为 WebSocket 协议, 这是服务器根据 WebSocket 发送的请求包决定的.
参考文章
- Real-time ASP.NET with SignalR https://dotnet.microsoft.com/apps/aspnet/signalr
- HTML5 WebSocket https://www.runoob.com/html/html5-websocket.html
- WebSocket WebAPI
微信公众号开发系列 - 玩转微信开发 - 目录汇总 http://blog.rdiframework.net/article/216
RDIFramework.NET - 基于. NET 的快速信息化系统开发框架 - 系列目录 http://blog.rdiframework.net/article/190
RDIFramework.NET ━ .NET 快速信息化系统开发框架 ━ 工作流程组件介绍 http://blog.rdiframework.net/article/169
RDIFramework.NET 框架 SOA 解决方案 (集 Windows 服务, WinForm 形式与 IIS 形式发布)- 分布式应用 http://blog.rdiframework.net/article/189
RDIFramework.NET 代码生成器全新 V3.5 版本发布 - 重大升级 http://blog.rdiframework.net/article/199
一路走来数个年头, 感谢 RDIFramework.NET 框架的支持者与使用者, 大家可以通过下面的地址了解详情.
RDIFramework.NET 官方网站: http://www.rdiframework.net/
RDIFramework.NET 官方博客: http://blog.rdiframework.net/
同时需要说明的, 以后的所有技术文章以官方网站为准, 欢迎大家收藏!
RDIFramework.NET 框架由海南国思软件科技有限公司专业团队长期打造, 一直在更新, 一直在升级, 请放心使用!
来源: https://www.cnblogs.com/huyong/p/11321658.html