SignalR指定用户推送消息
一、首先,在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指定用户推送消息的更多相关文章
- 微信硬件平台(八) 4 ESP8266通过微信公众号给用户推送消息
https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=自己申请微信公众号的TOKEN 输出结果: 由于aRDUINO串 ...
- JAVA调用易信接口向指定好友推送消息(二)POST测试
易信的API接口做的还算简单 http://open.yixin.im/document/oauth/api 根据指南上的步骤,利用易信提供的测试ID AppID(client_id): yxbbd0 ...
- SignalR控制台自托管服务端向web客户端指定用户推送数据,客户端断线重连
一.前言 SignalR是微软推出的开源实时通信框架.其内部使用Web Socket, Server Sent Events 和 Long Polling作为底层传输方式,SignalR会根据客户端和 ...
- PHP利用模板消息无限制向用户推送消息
<?php //获取微信access_token function getaccess_token(){ //appid与appsecret改成你自己的 $appid = '自己的appid'; ...
- JAVA调用易信接口向指定好友推送消息(一)背景需求
众所周知,中国电信内部一直使用易信群进行交流 各种工作交流都在易信群里面沟通 包括投诉处理,障碍报修,拍照上传 最重要的就是每天甚至每个时点的指标完成情况的通报 所以只能用4个字来形容 String ...
- signalr推送消息
参考:Tutorial: Getting Started with SignalR 2 and MVC 5 环境:vs2013,webapi2,entity framework6.0 实现效果:当用户 ...
- java-给微信推送消息 利用企业微信
目的:给关注用户推送消息 场景:自动化测试,运维监控,接口访问等报错预警.例如线上接口报错,发送提醒消息 准备工作: 1:注册企业号(为什么不用公众号呢?) 企业号注册 2:常用参数介绍: 1:COR ...
- 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言
在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...
- Qt通过极光推送向app推送消息
简介 最近在做个项目,当客服端收到防盗的消息通知时向手机app推送一个消息,告知有防盗报警.这么小的功能没必要自己写个推送端,极光推送免费而且推送的成功率高,已经能满足我们的需求了. 极光推送的文档大 ...
随机推荐
- CodeForces 725A
A. Jumping Ball time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 2017qq红包雨最强攻略,
这个只支持苹果手机,而且要有苹果电脑,只有苹果手机是不行的. QQ红包规则:只要你到达指定的位置,就可以领取附近的红包,一般也就几毛,还有几分的,当然也不排除有更高的,只不过我是没遇到... 那么既然 ...
- 内功心法 -- Java中的深拷贝和浅拷贝
写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------这篇博客主要来谈谈" ...
- W3Cschool学习笔记——CSS教程
CSS 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现 ...
- 1activiti认识和数据库和插件配置
工作流介绍 工作流(Workflow),就是通过计算机对业务流程自动化执行管理.它主要解决的是"使在多个参与者之间按照某种预定义的规则自动进行传递文档.信息或任务的过程, 从而实现某个预期的 ...
- mysql学习之权限管理
数据库权限的意义: 为了保证数据库中的业务数据不被非授权的用户非法窃取,需要对数据库的访问者进行各种限制,而数据库安全性控制措施主要有这三种,第一种用户身份鉴别,手段可以是口令,磁卡,指纹等技术,只有 ...
- 如何使用Babel将ES6转码为ES5?
一.前言: 当我们还在沉迷于ES5的时候,殊不知ES6早就已经发布几年了.时代在进步,WEB前端技术也在日新月异,是时候做些改变了! ECMAScript 6(ES6)的发展速度非常之快,但现代浏览器 ...
- 小米wifi局域网下播放硬盘影片使用方法
因为家里没开网,看视频都要缓存到手机上. 后来听说小米wifi可以做为一个局域网服务器来用,没忍住就买了一个. 但是下载app之后才发现被坑. 小米路由器需要登录帐号之后才可以使用,而且每次开启都要登 ...
- api接口json串换行
1.问题描述:在后台输入框中明明回车换行了,但是返回到 app客户端显示出来的 确实带有 \n 这个时候无论怎么调试都不行: 2.铺垫:大家都知道 php输出字符串的时候 使用 单引号 比使用 双 ...
- SharePoint 2016 配置应用程序商店
最近碰到一个新的需求,就是要给SharePoint配置应用程序商店,挺有意思的,就简单的配置和记录了一下,分享给大家. 其实应用程序商店之前感觉很鸡肋,但是用起来还是不错的.不喜勿喷,呵呵. 首先需要 ...