SignalR实现服务器与客户端的实时通信
百度百科给它的定义
实现实时通信。什么是实时通信的Web呢?就是让客户端(Web页面)和服务器端可以互相通知消息及调用方法,当然这是实时操作的。
它的作用
它最强吸引我的地方
实例代码
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文件
四 实现具体业务的核心类文件,它需要集成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) { var id = Context.ConnectionId; var userID = (HttpContext.Current.Session == null ? "" : HttpContext.Current.Session["UserID"] ?? "").ToString(); 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() { var id = Context.ConnectionId; var userID = (HttpContext.Current.Session == null ? "" : HttpContext.Current.Session["UserID"] ?? "").ToString(); 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功能代码片断
<!--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>
OK,现在运行你的程序,就可以实现客户端与服务器端实时通信了,利用这些特性,我们是不是可以实现很多事情呀,让消息推送更可靠吧!

1261



被折叠的 条评论
为什么被折叠?



