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,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" 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是用来帮助各个编程语 ...
随机推荐
- 【项目】搜索广告CTR预估(一)
本文介绍CTR相关基础知识. 一.广告投放系统 广告系统包含多个子系统.除了上图所示的广告投放系统外,还包含商业系统(广告库的获得),统计系统(点击展示日志的获得)等. 广告投放系统主要是面向用户的, ...
- OpenSSL命令---passwd
NAME passwd - compute password hashes SYNOPSIS openssl passwd [-crypt] [-1] [-apr1] [-salt string] [ ...
- 树莓派(raspberry pi)学习4: 更改键盘布局(转)
树莓派(raspberry pi)用了几次后,发现键盘老是按错,一些字符打不出来或打错 这个问题,折腾我半天.还是把心得分享一下吧 上网查,发现是键盘布局不对,树莓派(raspberry pi)是英国 ...
- Android之ADB指令
Android打包过程 aapt Android应用打包工具 adb Android调试桥 下面打包过程,eclipse帮我们自动打包好run as->Android application r ...
- python zookeeeper 学习和操作
1.zookeeeper介绍 ZooKeeper是一个为分布式应用所设计的分布的.开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用协调及其管理的难度,提供高性能的 ...
- 网易视频云技术分享:linux软raid的bitmap分析
网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅.低时延.高并发的视频直播.录制.存储.转码及点播等音视频的PAAS服务,在线教育.远程医疗.娱乐秀场.在线 ...
- [Shell]Bash变量:环境变量的配置文件和登录信息
----------------------------------------------------------------------------------------- 只有把环境变量放入配 ...
- php中英文截取无乱码 包括全角下的字符
符合UTF-8下,如果GBK下 改为 $content .= $str[$sing].$str[$sing+1]; $sing += 3; 改为 $sing += 2; /** ...
- hdoj 2544最短路
Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要 ...
- 生成树的个数——基尔霍夫定理(Matrix-Tree Theorem)
树有很多种形态,给定结点个数,求生成不同形态二叉树的个数,显然要用到Catalan数列. 那如果给定一个图(Graph)\(G=(V,E)\),要求其最小生成树G',最好的方法莫过于Prim或Krus ...