首先需要明确一下本文的主题是 SignalR Self Host+MVC 等多端消息推送服务,该主题主要包含以下内容:
- SignalR 框架的基本概念和实现原理
- SignalR Self Host 实现消息推送
- 在 MVC 项目中集成 SignalR
- 前端页面中接收消息和发送消息
在这篇文章中,我将详细讲解以上四个部分内容,其中包含了一些相关的示例,方便大家理解。
SignalR 框架概述
SignalR 是一个开源的实时通信框架,允许您通过 WebSockets 和其他实时网络协议来实现实时客户端 - 服务器通信。 SignalR 还自动处理连接管理、负载均衡和消息路由。 SignalR 的主要组成部分是 SignalR Hubs 和 SignalR Clients。
Hubs 允许您通过客户端脚本与服务器端代码进行通信,易于使用和理解。
Clients 允许服务器端代码向客户端代码发送消息,也是非常易于使用和理解的。
SignalR Self Host 实现消息推送
SignalR Self Host 是一个可执行文件,它可以用于在本地计算机上托管 SignalR 应用程序,并使其可从本地网络中的其他计算机上访问。
下面是一个简单的示例,演示如何使用 SignalR Self Host 实现简单的消息推送功能。
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using System;
namespace SignalRTestServer
{
class Program
{
static void Main(string[] args)
{
string url = "http://localhost:8080";
using (WebApp.Start(url))
{
Console.WriteLine("Server running on {0}", url);
Console.ReadLine();
}
}
}
public class ChatHub : Hub
{
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
}
}
在上面的示例中,我们创建了一个 SignalR 的 Hub,用于向所有客户端发送广播消息。通过 WebApp.Start
方法启动了 SignalR Self Host,并通过 Console.ReadLine() 方法等待用户输入。
在 MVC 项目中集成 SignalR
下面我们将展示如何在一个 ASP.NET MVC 项目中使用 SignalR。
第一步是将 SignalR NuGet 包添加到 MVC 项目中。此步骤可通过在 Visual Studio 中转到“Tools”-> “NuGet 包管理器”-> “管理解决方案的 NuGet 包”来完成。
在 NuGet 包管理器中搜索 SignalR 并安装 SignalR 的主包和启动器包。
第二步是启用 SignalR 的服务端。在您的 MVC 项目中,您需要创建一个扩展了 SignalR Hub 的类:
using Microsoft.AspNet.SignalR;
public class ChatHub : Hub
{
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
}
第三步是在将 SignalR 集成到 MVC 项目中,需要为 SignalR 注册一个路由,以便可以在客户端上启动 SignalR 连接。在 RouteConfig.cs 文件中,添加以下代码:
using System.Web.Routing;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin;
using Owin;
// ...
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
// ...
// 可以将 SignalR 连接路由注册到路由表中
routes.MapHubs();
// ...
}
}
public class Startup
{
public void Configuration(IAppBuilder app)
{
// 启用 SignalR 中间件
app.MapSignalR();
}
}
现在,您已经在 MVC 项目中启用了 SignalR 并为其提供了路由。我们还需要添加代码来响应用户请求。
前端页面中接收消息和发送消息
在前端页面中,我们需要使用以下代码实现与 SignalR 程序的通信:
<html>
<head>
<meta charset="utf-8" />
<title>SignalR Chat</title>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.4.1.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
$(function () {
var chat = $.connection.chatHub;
chat.client.broadcastMessage = function (name, message) {
$("#messages").append("<li><strong>" + name + "</strong>: " + message + "</li>");
};
$("#sendmessage").click(function () {
chat.server.send($("#displayname").val(), $("#message").val());
$("#message").val("").focus();
});
$.connection.hub.start().done(function () {
chat.server.send($("#displayname").val(), "has joined the conversation.");
});
});
</script>
</head>
<body>
<div>
<input type="text" id="displayname" placeholder="Your name" />
<input type="text" id="message" placeholder="Message" />
<input type="button" id="sendmessage" value="Send" />
<ul id="messages"></ul>
</div>
</body>
</html>
在上述代码中,我们首先使用 jQuery 的 $.connection()
方法创建一个与服务器连接的代理。然后,我们通过 chat.client.broadcastMessage
方法定义了一个回调函数,以便在接收到服务器发送的消息时更新前端页面。我们还在 click 事件的函数中调用了 chat.server.send
方法,该方法可以将消息发送到服务器。
当页面加载时,我们使用 $.connection.hub.start()
方法启动连接。这里的 start 方法有一个回调函数,使用 .done()
可以确保连接已成功建立。
至此,我们已经完成了 SignalR 的 Self Host+MVC 等多端消息推送服务的完整攻略。当然,还有很多不同的用法和要解决的问题,但这篇文章试图为您提供一个了解 SignalR 工作原理和配置 SignalR 的步骤的基础。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SignalR Self Host+MVC等多端消息推送服务(二) - Python技术站