SignalR
ASP.NET SignalR 是 ASP.NET 开发人员的库,可简化将实时 web 功能添加到应用程序的过程。 实时 web 功能使服务器代码能够在可用时立即将内容推送到连接的客户端,而不是让服务器等待客户端请求新的数据。
建立MVC项目
1.使用NuGet安装SignalR
2.建一个文件夹,在里面创建一个集线器类 和 OWIN Startup
集线器类中写:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace WebApplication1.SignalR
{
[HubName("MyHub")]//前端用和这个名
public class MyHub : Hub
{
public void sendAll(string message)
{
//处理服务端完成后调用客户端的方法
Clients.All.showMessage("php");
}
}
}
OWIN中写:
using System;
using System.Threading.Tasks;
using Microsoft.Owin;
using Owin;
[assembly: OwinStartup(typeof(WebApplication1.SignalR.Startup))]
namespace WebApplication1.SignalR
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
// 有关如何配置应用程序的详细信息,请访问 http://go.microsoft.com/fwlink/?LinkID=316888
}
}
}
HTML中:
<script src="~/Content/JS/jquery-1.12.2.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.1.2.js"></script>//NuGet安装Signal后会自动放到文件夹中
<script src="~/signalr/hubs"></script>
<script>
$(function () {
var chat = $.connection.MyHub;
//当连接建立完成对时候执行的方法
$.connection.hub.start().done(function () {
//chat.server.userConnected($(".user").text());
});
//前台触发,先调用服务器方法,服务器会回调客户端方法
$(".btn").click(function () {
chat.server.sendAll("fdsfds");
});
//创建一个客户端方法,可以让hub类调用这个方法
chat.client.showMessage = function (message) {
//message为推送过来的数据。
}
</script>
//上面需要前台触发,类似聊天需要有人点击发送,后台有了新数据往前端推送。
//下面的不用前台触发 前台只需对应showMessage方法
```csharp
public static void onReceive(List<string> alarms, List<string> DevState, List<string> Prevent, List<string> ZoneState)
{
string AlarmStr = string.Join("|", alarms.ToArray());//报警
string DevStateStr = string.Join("|", DevState.ToArray());//设备状态
string PreventStr = string.Join("|", Prevent.ToArray());//防区撤布防
string ZoneStateStr = string.Join("|", ZoneState.ToArray());//防区实时状态
//我正在使用SignalR向我的所有客户广播消息。我需要在集线器类之外触发广播
var context = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<SignalR.MyHub>();
context.Clients.All.showMessage(AlarmStr + "☆" + DevStateStr + "☆" + PreventStr + "☆" + ZoneStateStr);
}