一、首先,在MVC项目中安装SingalR包(SingalR2.0需要.net4.5以上,VS2010可以安装1.1.3版本,本例为VS2010+SignalR1.1.3)。

打开工具—NuGet程序管理器—程序包管理器控制台,输入:

Install-Package Microsoft.AspNet.SignalR-Version 1.1.3

安装完成后,一定要阅读弹出的txt,这里非常重要,

有两个很重要的提示,一是在Global.asax文件中加入RouteTable.Routes.MapHubs();二是在页面前端加入脚本<scriptsrc="~/signalr/hubs"></script>(注:本示例采用的是MVC4,MVC其他版本有其他的写法,所以要读这个readme)。

二、安装完signalr包后,我们在项目中添加一个Home控制器以及它的View,View选择母版页,记得在这个页面里加上

<scriptsrc="~/signalr/hubs"></script>

<script src="../../Scripts/jQuery.signalR-1.1.4.min.js"type="text/JavaScript"></script>

然后在项目中创建一个目录,目录里创建Hub类文件:

public class WorkflowHub: Hub

{

/// <summary>

/// 静态用户列表

/// </summary>

private IList<string> userList = UserInfo.userList;

/// <summary>

/// 用户的connectionID与用户名对照表

/// </summary>

private readonly static Dictionary<string, string>_connections = new Dictionary<string, string>();

/// <summary>

/// 发送函数,前端触发该函数给服务器,服务器在将消息发送给前端,(Clients.All.(函数名)是全体广播,另外Clients提供了组播,广播排除,组播排除,指定用户播发等等)

/// 该函数名在前端使用时一定要注意,前端调用该函数时,函数首字母一定要小写

/// </summary>

/// <param name="name1">发起者</param>

/// <param name="name2">消息接收者</param>

public voidSendByGroup(string name1, string name2)

{

//Client内为用户的id,是唯一的,SendMessage函数是前端函数,意思是服务器将该消息推送至前端

Clients.Client(_connections[name2]).SendMessage("来自用户"+name1 + " " + DateTime.Now.ToString("yyyy/MM/ddhh:mm:ss")+"的消息推送!");

}

/// <summary>

/// 用户上线函数

/// </summary>

/// <param name="name"></param>

public voidSendLogin(string name)

{

if (!userList.Contains(name))

{

userList.Add(name);

//这里便是将用户id和姓名联系起来

_connections.Add(name, Context.ConnectionId);

}

else

{

//每次登陆id会发生变化

_connections[name] = Context.ConnectionId;

}

//新用户上线,服务器广播该用户名

Clients.All.loginUser(userList);

}

}

其中

public class UserInfo

{

public static IList<string>userList = new List<string>();

}

为用户名称列表

在Home的View中,Index.cshtml:

<script src="../../Scripts/jquery.signalR-1.1.4.min.js"type="text/javascript"></script>

<!--Reference the autogenerated SignalR hub script. 注意一定别忘记写这句,signalr生成的脚本都在这-->

<script src="~/signalr/hubs"></script>

<h1>流程演示</h1>

<input type="hidden" id="displayname" />

<h2 id="thisname"></h2><br />

<select id="username" style="width:153px;">

</select>

<input id="send" type="button" value="发送" />

<div>

<h1 id="messgae"></h1>

</div>

<script type="text/javascript">

$(function () {

//前端Hub的使用,注意的是,Hub的名字是WorkflowHub,这里使用时首字母小写

var work = $.connection.workflowHub;

$('#displayname').val(prompt('请输入昵称:', ''));

$('#thisname').text('当前用户:'+$('#displayname').val());

//对应后端的SendMessage函数,消息接收函数

work.client.sendMessage = function(message) {

$('#messgae').append(message + '</br>')

};

//后端SendLogin调用后,产生的loginUser回调

work.client.loginUser = function(userlist) {

reloadUser(userlist);

};

//hub连接开启

$.connection.hub.start().done(function () {

var username = $('#displayname').val();

//发送上线信息

work.server.sendLogin(username);

//点击按钮,发送消息

$('#send').click(function() {

var friend = $('#username').val();

//调用后端函数,发送指定消息

work.server.sendByGroup(username, friend);

});

});

});

//重新加载用户列表

var reloadUser = function(userlist) {

$("#username").empty();

for (i = 0;i < userlist.length; i++) {

$("#username").append("<option value="+userlist[i]+">"+userlist[i]+"</option>");

}

}

</script>

调试执行,打开两个网页(如果提示signalr必须在jquery之后,就在_layout.cshtml中把jquery放前面),输入用户名称,登录后在列表中会显示当前登录的用户的信息:

另一个网页中输入李晨:

我们在李晨这里,给邓超发送,这样我们就会在邓超这里看到推送的消息了:

SignalR指定用户推送消息的更多相关文章

  1. 微信硬件平台(八) 4 ESP8266通过微信公众号给用户推送消息

    https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=自己申请微信公众号的TOKEN 输出结果:  由于aRDUINO串 ...

  2. JAVA调用易信接口向指定好友推送消息(二)POST测试

    易信的API接口做的还算简单 http://open.yixin.im/document/oauth/api 根据指南上的步骤,利用易信提供的测试ID AppID(client_id): yxbbd0 ...

  3. SignalR控制台自托管服务端向web客户端指定用户推送数据,客户端断线重连

    一.前言 SignalR是微软推出的开源实时通信框架.其内部使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式,SignalR会根据客户端和 ...

  4. PHP利用模板消息无限制向用户推送消息

    <?php //获取微信access_token function getaccess_token(){ //appid与appsecret改成你自己的 $appid = '自己的appid'; ...

  5. JAVA调用易信接口向指定好友推送消息(一)背景需求

    众所周知,中国电信内部一直使用易信群进行交流 各种工作交流都在易信群里面沟通 包括投诉处理,障碍报修,拍照上传 最重要的就是每天甚至每个时点的指标完成情况的通报 所以只能用4个字来形容 String ...

  6. signalr推送消息

    参考:Tutorial: Getting Started with SignalR 2 and MVC 5 环境:vs2013,webapi2,entity framework6.0 实现效果:当用户 ...

  7. java-给微信推送消息 利用企业微信

    目的:给关注用户推送消息 场景:自动化测试,运维监控,接口访问等报错预警.例如线上接口报错,发送提醒消息 准备工作: 1:注册企业号(为什么不用公众号呢?) 企业号注册 2:常用参数介绍: 1:COR ...

  8. 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言

    在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...

  9. Qt通过极光推送向app推送消息

    简介 最近在做个项目,当客服端收到防盗的消息通知时向手机app推送一个消息,告知有防盗报警.这么小的功能没必要自己写个推送端,极光推送免费而且推送的成功率高,已经能满足我们的需求了. 极光推送的文档大 ...

随机推荐

  1. .NET操作RabbitMQ组件EasyNetQ使用中文简版文档。

    本文出自EasyNetQ官方文档,内容为自己理解加翻译.文档地址:https://github.com/EasyNetQ/EasyNetQ/wiki/Quick-Start EasyNetQ简介 Ea ...

  2. Win下 MySQL数据库安装与配置详解

    第一步 从官网下载安装包 (本次只写安装版的32位的mysql) 1. https://www.mysql.com/downloads/ 下载的官网地址 一直滑到最下面 然后点第一个 然后选第一个 这 ...

  3. TCP/IP协议族(二) HTTP报文头解析

    本篇博客我们就来详细的聊一下HTTP协议的常用头部字段,当然我们将其分为请求头和响应头进行阐述.下方是报文头每个字段的格式,首先是头部字段的名称,如Accept,冒号后方紧跟的是该字段名所对应的值,每 ...

  4. css3 3d初入门(一)

    css3 3D.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin: 0 0 ...

  5. 今日头条- iOS客户端 启动速度优化实践

    版权声明 作者:今日头条iOS团队 原文:https://techblog.toutiao.com/2017/01/17/iosspeed/ 应用启动时间,直接影响用户对一款应用的判断和使用体验.头条 ...

  6. Angular2 + Webpack项目搭建Demo

    本文将从头开始编写实际的代码来完成一个angular2的demo. 题外话是其实angular2官网的快速开始项目已经很酷炫了,但其侧重快速二字,只够拿来练习玩耍,倒是github上确实已经有了一些不 ...

  7. Fiddler教程【转】

    阅读目录 Fiddler的基本介绍 Fiddler的工作原理 同类的其它工具 Fiddler如何捕获Firefox的会话 Fiddler如何捕获HTTPS会话 Fiddler的基本界面 Fiddler ...

  8. CentOS安装Tomcat8

    安装环境:CentOS-6.5 安装方式:源码安装 软件:apache-tomcat-8.0.0.RC3.tar.gz 下载地址:http://tomcat.apache.org/download-8 ...

  9. [译]如何在Web开发中使用Python

    [译]如何在Web开发中使用Python 原文:HOWTO Use Python in the Web 摘要 这篇文档展示了Python如何融入到web中.它介绍了几种Python结合web服务器的方 ...

  10. 【译】Nodejs最好的ORM - TypeORM

    TypeORM github: https://github.com/typeorm/typeorm 这篇译文是从TypeORM github上的使用说明上翻译过来的,已经提交PR并merge到库中了 ...