using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
namespace DBDLL.SingalRS
{
[HubName("mysingal")]//使用小写,试过使用大写,但是在html页会出错
public class MySingal : Hub
{
public void SendMessage(string name, string message)
{
//因为在后台调用,所以要这样,否则会出错,提示Using a Hub instance not created by the HubPipeline is unsupported</pre>
var hubContext = GlobalHost.ConnectionManager.GetHubContext<MySingal>();
hubContext.Clients.All.addNewMessageToPage(name, message); //用户调用客户端的函数
}
public void Init() { }
}
//3.同在这个文件夹下, 建立Startup类,实现SingalR的注册
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using Microsoft.Owin;
using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
[assembly: OwinStartup(typeof(DBDLL.SingalRS.Startup))]
namespace DBDLL.SingalRS
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
//4. 因为要从后台推送数据,所以在后台启动了一个线程来向前台发送数据。新建一个类封装线程。
using DBDLL.SingalRS;
using Microsoft.AspNet.SignalR;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web;
namespace DBDLL.Models
{
public class SingalRSend
{
private Thread m_hreadCycle = null;
private MySingal m_MySingal = null;
public SingalRSend()
{
m_MySingal = new MySingal();
m_hreadCycle = new Thread(ThreadCycle);
m_hreadCycle.Start();
m_hreadCycle.IsBackground = true;
}
private int m_Index = 0;
private void ThreadCycle()
{
while (true)
{
m_Index++;
m_MySingal.SendMessage("tval1", "this is a msg test<>" + m_Index.ToString());
Thread.Sleep(1000);
}
}
~SingalRSend()
{
m_hreadCycle.Abort();
}
}
}
// 5. 关于线程的启动,在Global.asax的Application_Start() 函数创建线程类的事例。这样网站启动时线程就启动了。
//6. 前端html页面。需要注意的是 Jquery 必须要在jquery.signalR-2.2.1.min.js前面被引用,
//<script src="../../signalr/hubs"></script>这个在工程里面没找到,但是文档里面让这么写,就写了。 var chat = $.connection.mysingal;这里的mysingal就是2 中建立的类的名字,不过必须要小写才行,原因上面说过了。
<script src="../../Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="../../signalr/hubs"></script>
<script>
$(function () {
// Reference the auto-generated proxy for the hub.
var chat = $.connection.mysingal;
// Create a function that the hub can call back to display messages.
chat.client.addNewMessageToPage = function (name, message) {
// Add the message to the page.
$('#UName').val(name + ":" + message);
};
$.connection.hub.start().done(function () {
chat.server.init();
});
});
</script>
//这样就 ok了。之前说过了因为很菜,可能会有一些问题,欢迎指正