SignalR 实时数据广播教程

SignalR 是一个库,它允许服务器端代码推送内容到客户端,而无需客户端请求。这意味着可以在服务器端数据准备好后,实时地将数据广播给所有连接的客户端。SignalR 通过生成 JavaScript 代码来实现这一点,当在客户端渲染时,不需要担心代理 JavaScript,因为 SignalR 会处理所有这些工作。只需要从服务器端调用 JavaScript 函数即可。

要在项目中添加 SignalR,需要去 Nuget 包管理器搜索 SignalR,会看到 MicrosoftASP.NETSignalR 在列表的顶部,点击安装即可。它会添加所有运行所需的引用。如果项目中没有 Scripts 文件夹,它会添加一个 Scripts 文件夹并导入 jquery 和 jquery-signalR 库。

在这个阶段,已经拥有了所有必需的引用和脚本。现在,是时候添加 SignalR 启动类,这样就可以告诉 OWIN 如何配置它。Startup 类如下所示:

using Microsoft.Owin; using Owin; [assembly: OwinStartupAttribute( typeof(DeepASP.SignalRMVC.SignalRStartup))] namespace DeepASP.SignalRMVC { public partial class SignalRStartup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } }

将这个启动类添加到了 App_Start 文件夹中,因为 MVC 已经创建了这个文件夹,并且里面已经有了启动类。但可以将它放在任何想要放的地方。现在,添加 SignalR Hub 类。如果右键添加新项,它应该在 signalR 模板下,如果没有,不用担心,只需添加一个新类并继承自抽象类:

namespace DeepASP.SignalRMVC { using Microsoft.AspNet.SignalR; using Microsoft.AspNet.SignalR.Hubs; [HubName("Broadcaster")] public class SignalRHub : Hub { } }

逻辑上,这就是需要的所有 SignalR 内容。现在想访问 Hub,这样就可以从服务器端调用 JavaScript 函数,对吗?是的。好的,让添加另一个类 Broadcast.cs 如下:

namespace DeepASP.SignalRMVC { using Microsoft.AspNet.SignalR; using System; public class Broadcast { private static Lazy context = new Lazy(() => GlobalHost.ConnectionManager.GetHubContext()); private static IHubContext Broadcaster { get { return context.Value; } } public static bool SendDataToAllConnectedClients(string data) { Broadcaster.Clients.All.JavaScriptFunction(data); return true; } } }

SendDataToAllConnectedClients 方法调用 JavaScript 函数 “JavaScriptFunction”,传递一个 string 参数。可以以 JSON 格式传递任意多的复杂对象。只是为了清晰起见,将 JavaScript 端的函数命名为 JavaScriptFunction,但会给它一个有意义和目的性的名字。现在,将编写这个 JavaScript 函数。对于这篇文章,创建了另一个名为 BroadcastController.cs 的控制器及其视图。现在,因为这个视图将负责广播从服务器发送的消息,将在这个视图中添加所需的 .js 库:

<script src="~/Scripts/jquery-2.1.4.js"></script> <script src="~/Scripts/jquery.signalR-2.2.0.js"></script> <script src="~/signalr/hubs"></script> <script> var broadcaster = $.connection.Broadcaster; broadcaster.client.JavaScriptFunction = function(d) { document.getElementById("data").innerHTML = d; } $.connection.hub.start(); </script>

JavaScript 库的顺序很重要。现在这就是从服务器端调用的 JavaScript 函数 “JavaScriptFunction” 的订阅。对于这个演示,只是从服务器端发送了一个字符串 HTML,但当订阅时,可以在这里编写逻辑。

是的,这就是SignalR的全部内容。如果对下载这个演示感兴趣,请点击这里。

在进入生产环境之前,这里有一些重要的事情需要记住:

  • SignalR2 的先决条件:
  • .NET Framework 4.5
  • 运行应用程序(IIS)的用户必须具有完全信任
  • IIS 必须在托管模式下运行,而不是经典模式
  • IIS 7 或更高版本(Websocket 需要 IIS8)
  • jQuery 版本必须大于 1.6
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485