一 首先引用相關DLLjavascript
二 Startup文件爲SignalR的入口java
using Microsoft.Owin;using Owin; [assembly: OwinStartup(typeof(SignalR.Core.Startup))]namespace SignalR.Core { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); } } }
三 一組SignalR的JS文件jquery
四 實現具體業務的核心類文件,它須要集成Hub,須要使用特性HubName爲SignalR起個名字,以便在客戶端去調用它服務器
using Microsoft.AspNet.SignalR;using Microsoft.AspNet.SignalR.Hubs;using SignalR.Core.Model;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web;namespace SignalR.Core { [HubName("UrlHub")] public class UrlValid : Hub { static List<CurrentUser> ConnectedUsers = new List<CurrentUser>(); public void Connect(string url,string userID) { var id = Context.ConnectionId;if (ConnectedUsers.Count(x => x.ConnectionId == id) == 0) { ConnectedUsers.Add(new CurrentUser { ConnectionId = id, UserID = userID, }); Clients.Caller.onConnected(id, userID, url); //Clients.AllExcept(id).onNewUserConnected(id, userID); Clients.Client(id).onNewUserConnected(id, userID); } else { Clients.Caller.onConnected(id, userID, url); Clients.Client(id).onExistUserConnected(id, userID); // Clients.AllExcept(id).onExistUserConnected(id, userID); } } /// <summary> /// 登出 /// </summary> public void Exit(string userID) { var id = Context.ConnectionId; OnDisconnected(); Clients.Caller.onConnected(id, userID, ""); Clients.Client(id).onExit(id, userID); } /// <summary> /// 斷開 /// </summary> /// <returns></returns> public override System.Threading.Tasks.Task OnDisconnected() { var item = ConnectedUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId); if (item != null) { ConnectedUsers.Remove(item); var id = Context.ConnectionId; Clients.All.onUserDisconnected(id, item.UserID); } return base.OnDisconnected(); } } }
五 核心JS功能代碼片段app
<!--Reference the jQuery library. --> <script src="/Scripts/jquery-1.8.2.min.js"></script> <!--Reference the SignalR library. --> <script src="/Scripts/jquery.signalR-1.0.0.js"></script> <!--Reference the autogenerated SignalR hub script. --> <script src="/signalr/hubs"></script> <script type="text/javascript"> $(function () { // Declare a proxy to reference the hub var chatHub = $.connection.UrlHub; registerClientMethods(chatHub); // Start Hub $.connection.hub.start().done(function () { registerEvents(chatHub); }); }); //註冊客戶端事件 function registerEvents(chatHub) { $("#btn").click(function () { var url = "dasfjasldfj"; chatHub.server.connect(url); }); $("#logOut").click(function () { chatHub.server.exit(); }); } //註冊客戶端方法 function registerClientMethods(chatHub) { chatHub.client.onConnected = function (id, userID, url) { console.log("與服務器創建了連接" + url); } chatHub.client.onUserDisconnected = function (id, userID) { console.log("與服務器取消了連接"); } chatHub.client.onNewUserConnected = function (id, userID) { alert("新用戶完成爲合法"); } chatHub.client.onExistUserConnected = function (id, userID) { alert("用戶" + userID + "不能重複登錄"); } chatHub.client.onExit = function (id, userID) { alert("用戶" + userID + "成功退出!"); } } </script>
靜態類ide
public static class BroadCast
{
public static void SendAllMessage(string name, string mes)
{
IHubContext chat = GlobalHost.ConnectionManager.GetHubContext<Hub上下文>();
chat.Clients.All.broadcastMessage(name, mes);
}ui
}
url