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文件
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAASkAAADRCAIAAAAfTdMVAAALo0lEQVR4nO2bz4odxxWH9RxaXIQWBjGgjd/Ar2AI0lZaaiH8BsaECSjgrOOVQDbCEBi0tBcCefYGEW0SrTIKAUFAM3ZURCQwWVw0dLqqTp+q/lPn1P0+CtG376nq6qa/W1dz+3ft0z9ebtxCCJ/9P1999dvzdxfn7y72L/cbIYTt50ajbdauzR/i8+/L6vfu7WXLtZx7Q4oOWlpPo63d5rp3/9nlrx/KulS7N/RnDZfwk7Zlm+Xe/WeX//5PwS0bPjLfvTUa7tG2bPXu3X92+eG/ZV//4v/pxWi+cyZ37vfHG3Gv5BdXYQ9O0tZole4NxSty7+HDh7J7P/7w4+TfWpJfPnOmxV2SvYQaGm2NVuPeSLwi954+fSq79/XXf9D8nTMpT25PvFPj3qcZjWm0RVqxe59/f/nrh8sRyr4hhFevXsnu3blzp+hvLau6J++n0ea0BX5jKGohhLt378r6/fUvr3PuJW0f7pwsyO0Z7pcPR6Mt0hq4d3x8LLv35MmTye+cMxs60Zq3Bu49f/5cdm/Peu6xmtEstAbu6Wl+dWi09drW7tFotH3DPRqtTbtW9CUQAJYC9wDa4Nu9+OeK1jMC0LKde6enp8sOeHx8fBW6HT6BDeCC7dy7detWtX7JHwBzaXcAF2zn3m63Ozo6qtPvs6m8X8W6t9vtKmYCsBSbundyclKn3xruAbRlU/dCCHX6aZ5B428t4Iut3QshPHr06Ojo6O3bt/q+c9zb7Xb7Q19tjLYBmrC1e6enp0dHRycnJ0V9Z657Q+XinQBN2NS9OvEC7kGPbP13zgrxAu5Bj2zn3s2bN+vEC0v8rWU3YPiy8mQAZrOde9XiBf7OCT3i43lO3IP+8OEeQH/gHkAbcA+gDbgH0AbcA2iDK/f++fbid7+5uHcj1/71p9+3niKAFk/uyeLtW+s5Amhx5d69Gxf3bpz/4++j2B7ugUccuhdFZpXKNXyCbPLQ+mfcljqLpR6p47m8asy5993PZ598e3b98dkn35599/PZ8K2Z7rVi8i5PPupdN1TpxJYaCiow5971x2df/vTmhz//7cuf3lx/3IN7YeouVzpw9RT4MnPCvdaYc09gjnvxihHHGuKyZNQ9GYbYpRiOMzk35fI4mk8unJGcWPLcNddHnnnpicAec+5df3w2bMO3Fvz/3i76mqfciG/QeHD50MqJ5WqUQwn1dec+Z/KQxKh75+8uLLg3+hTP3cdFN6hyYsmyyVUlOZ94ddJvTCIfCwQ8uZdj7XUvOcJw5zbu6Qty86zYmEQ+FggYdW/0nTP5M/r7N69DCO/fvK77jSFeQ5IL3dXL3JqjlEEWTFMzrJQPlxxZc6bClIT5yMeCHObcS3L+4Hbs3i/ffPH+5Ytfvvni/MFtzSArfUIf+H124Kc/Bx/uvX/5Iqnfxb0b5w9uv3/5QugrfBLP/JA+5A941rf5+HAPoD9wD6ANuAfQBtwDaAPuAbTBlXvk1qEjPLlHbh16wpV75NahIxy6R259iRpojjn3yK3PGQocYc49cutyGe51gzn3BMitTw6VOwUWTIOYc4/culxT+v89lDOLUffIrSfLlCtY/AGBgQbx5F4OcuuaGvSzhlH3yK0LXz4nv3/KJwVGMOdeEnLrRRicEsT4cI/cugbWN1/4cA+gP3APoA24B9AG3ANoA+4BtMGVe+TWoSM8uUduHXrClXvk1qEjHLpHbn3poy/eETSYc4/c+pyhwBHm3CO3LpfhXjeYc0+A3Lo8VO7Q8UvN+lndEZSYc4/culwjuxdSitbNWTkxqMaoe+TWk2XyyrOqe1cTkLuAHk/u5SC3PnxrPfeUvUCJUffIrQuLW06epHuTZyQfK54h7i2FOfeSkFtvQsenZgEf7pFb3xLWt23w4R5Af+AeQBtwD6ANuAfQBtwDaIMr98itQ0d4co/cOvSEK/fIrUNHOHTvUHPryp+8F3lSJ37Are55urVpPoE5mHPvkHPrQf1o5fwpVdS4vtENYs69A8+t497hYM49gV5z60H9fXJyqNx3xckvkMk98qGFSypfQ/0khTNVnqxlzLlHbr16nGRNcoYVNZo9QoFmQ55PkqIPOGsYdY/ceukguTKle8mVZ3ICyT3yWpSbT90KljwRuYsdPLmX4xBy6/pbas66J+9UXpDcQee8lUM5c5sYdY/curA0ybevPP9RZbJjfKzc0ScvYG7k4QQmeyXPNN6fHMcy5txLQm4dkri++D7cI7cOQ3ytbzl8uAfQH7gH0AbcA2gD7gG0AfcA2uDKPXLr0BGe3CO3Dj3hyj1y69ARDt0jtz77cGABc+6RW6+uAV+Yc4/cenUN+MKcewLk1vVDxSNjrDXMuUduvXqcigGhIUbdI7deOohQyaJnE0/u5SC3rilGP2sYdY/cem628joc7497gRHMuZeE3HoRBqcEMT7cI7eugfXNFz7cA+gP3ANoA+4BtAH3ANqAewBtcOUeuXXoCE/ukVuHnnDlHrl16AiH7pFbX/roi3cEDebcI7deXQO+MOceufXqGvCFOfcEyK3LQ+UOHb/UHKu6Iygx5x659ZnjDP9N9lLOuWhiUIFR98itlw4SVnYv2MtteMeTeznIrQ9r1nNPPxPQYNQ9cuu52QrrcNK9yTMSTkG+ODATc+4lIbfehI5PzQI+3CO3viWsb9vgwz2A/sA9gDbgHkAbcA+gDbgH0AZX7pFbh47w5B65degJV+6RW4eOcOiew9x6zCLP00w+E1d9dM04+p/gTV15O5hzr7/c+qokH+mM949qJqXKjV9UAzLm3Osyt74eFe4VvYt762HOPQH7uXXh0MmhcmW5b4/JPbmTisfM9YpnMllZNFp8SYXLdTiYc6+/3HryrclxNBu5cSZv6y3dKy0+HIy6119uXV6v4pqcafIKpvksKHp3cfdCv/mPUjy5l8N+bl2YwOSxKta93FSFwynnWVQjF6CfUff85tZzC1pu2GRNvB2XjRB65eajmfPMmnh/fDUOFnPuJek+t665g/3S3xktgg/3DiG33t9q0N8ZLYsP9wD6A/cA2oB7AG3APYA24B5AG1y5R24dOsKTe+TWoSdcuUduHTrCoXvk1j+OED/Spfw5W1MwOU71T+dzHmao62gTc+6RWy9idDtevRRuU41UufGLakDGnHvk1ouocK/oXdxbD3PuCZBbT+7JnVQ8Zq5XPJPJSmVN8tDxS+Hqze9oFnPukVvXb+TG0dzHyndnupecUsU11B/UEUbdI7eeM01ewZT3cQfuhaVzJNvjyb0c5NaFXpMzKZpnRc167il7mcWoe+TWR9tx2QihV24+mjnPqdml3Ju8wsljxePHV9Ud5txLQm4dQndXxod75NYPmV6vjA/3APoD9wDagHsAbcA9gDbgHkAbXLlHbh06wpN75NahJ1y5R24dOsKhe+TWP44QP9Kl+Rl6y5qrysmaA8Sce+TWi0g+QhnvT9avXQMy5twjt14E7vnFnHsC5NaTe3InFY8pdMy9Nd+95CUVLtfhYM49cuv6jdw4k7f1pC2TlXr3SosPB6PukVvPmZYrE3ol5yzPdrK42r2wdP7DL57cy0FuXeglzKFinkU1cgH6GXWP3PpoOy4bIfTKTWaXFzU5w4qaeH989IPFnHtJyK27pr8zWgQf7pFb90h/Z7QsPtwD6A/cA2gD7gG0AfcA2oB7AG1w5R65degIT+6RW4eecOUeuXXoCIfukVv/OEL8SJfm5+wta3IdS7vM7GgTc+6RWy9idDsKj2jG+9euARlz7pFbLwL3/GLOPQFy68k9uZOKxxQ65t6a6Wd86ORL4erN72gWc+6RW9dv5MbR3MfKd2e6l5xSxTXUH9QRRt0jt54zLVcm9ErOWZ7tZHFz98LSOZLt8eReDnLrQi9hDhXzrKhZzz1lL7MYdY/c+mg7Lhsh9MpNRrjpkzMsrdml3BMuxXAjnvlof3wW7jDnXhJy6xC6uzI+3CO3fsj0emX+B++dbSMXY0fsAAAAAElFTkSuQmCC" alt="" />
四 实现具体业务的核心类文件,它需要集成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) == )
{
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功能代码片断
<!--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,现在运行你的程序,就可以实现客户端与服务器端实时通信了,利用这些特性,我们是不是可以实现很多事情呀,让消息推送更可靠吧!
SignalR实现服务器与客户端的实时通信的更多相关文章
- SignalR一个集成的客户端与服务器库。内部的两个对象类:PersistentConnection和Hub
SignalR 将整个交换信息的行为封装得非常漂亮,客户端和服务器全部都使用 JSON 来沟通,在服务器端声明的所有 hub 的信息,都会一般生成 JavaScript 输出到客户端. 它是基于浏览器 ...
- [渣译文] SignalR 2.0 系列:SignalR的服务器广播
英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第八篇:SignalR的服务器广 ...
- SignalR 实现web浏览器客户端与服务端的推送功能
SignalR 是一个集成的客户端与服务器库,基于浏览器的客户端和基于 ASP.NET 的服务器组件可以借助它来进行双向多步对话. 换句话说,该对话可不受限制地进行单个无状态请求/响应数据交换:它将继 ...
- SignalR 2.0 系列:SignalR的服务器广播
英文渣水平,大伙凑合着看吧…… 这是微软官方SignalR 2.0教程Getting Started with ASP.NET SignalR 2.0系列的翻译,这里是第八篇:SignalR的服务器广 ...
- 第六章SignalR的服务器广播
第六章SignalR的服务器广播 1.概述: VS可以通过 Microsoft.AspNet.SignalR.Sample NuGet包来安装一个简单的模拟股票行情应用.在本教程的第一部分,您将从头开 ...
- SignalR的服务器广播
可以试试 https://github.com/angular-ui/bootstrap 这个框架啊 [渣译文] SignalR 2.0 系列:SignalR的服务器广播 2014-03-13 09: ...
- 【node】node的核心模块---http模块,http的服务器和客户端
nodejs事件机制 ##### http服务器和客户端 node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 HTTP服务器 1. http.crea ...
- SVN服务器和客户端安装教程
SVN是什么?有何用? SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁 ...
- 2016windows(10) wamp 最简单30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world
2016最简单windows(10) wamp 30分钟thrift入门使用讲解,实现php作为服务器和客户端的hello world thrift是什么 最简单解释 thrift是用来帮助各个编程语 ...
随机推荐
- construction of tuples containing 0 or 1 items
[construction of tuples containing 0 or 1 items] the syntax has some extra quirks to accommodate the ...
- navicat for mysql
下载地址:https://www.navicat.com/cht/download 详情:http://baike.baidu.com/link?url=zo3CUg3HC5XUHkz4YqXO6Em ...
- POJ2762 UV
题意:n个山洞,对于每两个山洞s,e,都满足s可以到达e或者e可以到达s,则输出Yes,否则输出No. ---------------------------------------- 第一个缩点的题 ...
- C_C++圣战(摘录)
我的回忆和有趣的故事 --- C/C++圣战篇 李维 (声明以下的这篇文章内容是我个人的回忆以及看法,没有任何特别的偏见,许多的事情是根据我的记忆以及从许多人的诉说中得知的,也许内容不是百分之百的正确 ...
- docker学习使用
安装什么的就略过了,之前已经整理过,这里就说说自己使用中的一些东西,也是初用,记录下(现在使用win10 64位,使用Docker for Windows直接安装就好[需要专业版win10安装hype ...
- AngularJS学习---更多模板(More Templating) step 8
1.切换分支 amosli@amosli-pc:~/develop/angular-phonecat$ git checkout step- #切换分支 amosli@amosli-pc:~/deve ...
- Particle Playground 3.03 - 粒子特效王者
<ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op> <ignore_js_op ...
- PAC自动代理文件格式,教你如何写PAC文件
PAC文件格式 PAC文件是纯文本格式的,实际上就是JavaScript文件.Chrome/Chromium的扩展Switchy!的"Auto Switch Mode"功能实际上也 ...
- 3163: [Heoi2013]Eden的新背包问题
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
- wsdl地址如何在远程服务器上查看源码?
工作需要,接了几个webservice接口,但是厂家给的规范十分不规范,服务名称没一个写对的,要是我的本地电脑可以打开wsdl地址,那倒没什么,察看一下wsdl就可以. 但是好多wsdl地址我本地电脑 ...