消息推送SignalR简单实例
消息推送SignalR:一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信。
功能:当所连接的客户端变得可用时服务器代码可以立即向其推送内容,而不是让服务器等待客户端请求新的数据。
可参考:http://www.cnblogs.com/ssk-bak/p/5799976.html
前台关键之处:
1首先获取客户端页面的名字;
2然后通过 $.connection.chat 建立对应服务器端 Hub 类的代理对象 chat;
3服务器通过 dynamic 方式调用客户端的该方法以实现推送功能。在这里每当收到服务器推送来的消息,就在客户端页面的 discussion 列表追加该消息。
4当点击发送所有用户按钮时,客户端通过代理对象调用服务器端的 send 方法以实现向服务器发送消息。当点击发送给指定用户按钮,并填写在线的用户时,客户端通过代理对象调用服务器端的 send 方法以实现向服务器发送消息给指定用户,可同时开启两个窗口测试。
5通过 $.connection.hub.start(); 语句打开链接。
实现代码:
后台:
1.先登录,登录后用户名会记录在一个Dictionary容器中:
/// <summary>
/// 用户的connectionID与用户名对照表
/// </summary>
private readonly static Dictionary<string, string> UserDictionary = new Dictionary<string, string>();
/// <summary>
/// 用户上线函数
/// </summary>
/// <param name="name"></param>
public void sendLogin(string name)
{
if (!UserDictionary.Keys.Contains(name))
{
//这里便是将用户名和连接ID存入
UserDictionary.Add(name, Context.ConnectionId);
}
else
{
//每次登陆id会发生变化
UserDictionary[name] = Context.ConnectionId;
}
}
2.将信息发送给所有用户或指定用户:
//发送信息到指定用户
public void Send(string fromName, string toName, string message)
{
if (UserDictionary[toName] != null)
{
Clients.Client(UserDictionary[toName]).broadcastMessage(fromName, message);
}
}
//广播所有信息
public void Send(string name, string message)
{
Clients.All.broadcastMessage(name, message);
}
前台:
<body>
<div class="container">
当前用户:<input type="text" id="displayname" hidden="hidden" /><label id="uName"></label>
<br /><br />
发送消息:<input type="text" id="message" />
<input type="button" id="sendmessage" value="发送给所有用户" />
<input type="text" id="toUser" name="toUser" />
<input type="button" id="sendTouser" value="发送给指定用户" />
<br />
<div>
接收信息:
</div>
<ul id="discussion"></ul>
</div>
<!--Script引用-->
<script src="Scripts/jquery-1.6.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.2.1.min.js"></script>
<script src="signalr/hubs"></script>
<!--更新页面并发送消息-->
<script type="text/javascript">
$(function () {
//启用日志记录
$.connection.hub.logging = true;
// Declare a proxy to reference the hub.
var chat = $.connection.chatHub;
// 创建回调函数
chat.client.broadcastMessage = function (name, message) {
// 显示namemessage.
var encodedName = $('<div />').text(name).html();
var encodedMsg = $('<div />').text(message).html();
//在页面中显示
$('#discussion').append('<li><strong>' + encodedName + '</strong>: ' + encodedMsg + '</li>');
};
// 页面开始时输入用户名,保存来显示该用户相关信息(实际用户登入系统是自动设置)
$('#displayname').val(prompt('输入用户名:', ''));
document.getElementById("uName").innerHTML = $('#displayname').val();
// 将初始焦点设置为消息输入框。
$('#message').focus();
//开启客户端(web)与服务器端连接
$.connection.hub.start().done(function () {
var username = $('#displayname').val();
chat.server.sendLogin(username);
$('#sendmessage').click(function () {
// 调用发送方法,发送给所有用户
chat.server.send($('#displayname').val(), $('#message').val());
$('#message').val('').focus();
});
$('#sendTouser').click(function () {
// 调用发送方法,发送给指定用户
var touser = $('#toUser').val();
chat.server.send(username, touser, $('#message').val());
});
});
});
</script>
</body>
效果图:


消息推送SignalR简单实例的更多相关文章
- C# BS消息推送 SignalR介绍(一)
1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 介绍 1)SignalR能用来持久客户端与服务端的连接,让我们便于开发一些实时的应用,例如聊天室在 ...
- C# BS消息推送 SignalR Hubs环境搭建与开发(二)
1. 前言 本文是根据网上前人的总结得出的. 环境: SignalR2.x,VS2015,Win10 2. 开始开发 1)新建一个MVC项目,叫做SignalRDemo 2)安装SignalR包 In ...
- 5.Android消息推送机制简单例子
1.首先布局文件xml代码: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout x ...
- 消息推送SignalR
一.什么是 SignalR ASP.NET SignalR is a library for ASP.NET developers that simplifies the process of add ...
- 基于ajax与msmq技术的消息推送功能实现
周末在家捣鼓了一下消息推送的简单例子,其实也没什么技术含量,欢迎大伙拍砖.我设计的这个推送demo是基于ajax长轮询+msmq消息队列来实现的,具体交互过程如下图: 先说说这个ajax长轮询,多长时 ...
- 使用websocket进行消息推送服务
Websocket主要做消息推送,简单,轻巧,比comet好用 入门了解:https://www.cnblogs.com/xdp-gacl/p/5193279.html /** * A Web Soc ...
- WinForm中 Asp.Net Signalr消息推送测试实例
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- Asp.net SignalR 实现服务端消息推送到Web端
之前的文章介绍过Asp.net SignalR, ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信. 今天我 ...
随机推荐
- 【文文殿下】 [SDOI2013]保护出题人 题解
题解 我们把伤害-时间图像画出来.然后维护一下僵尸血量的前缀和.最好情况肯定是有一个僵尸恰好死在戴夫家门口.我们把原点到其他n个点的斜率最大的一个累积到答案. 发现每添加一个点,其他所有点的坐标都变了 ...
- 在cad2008引用了错误的com接口的dll导致出现了
请求“System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, Publi ...
- 群辉6.1.7安装scrapy框架执行爬虫
只针对会linux命令,会python的伙伴, 使用环境为: 群辉ds3615xs 6.1.7 python3.5 最近使用scrapy开发了一个小爬虫,因为很穷没有服务器可已部署. 所以打起了我那台 ...
- 【xsy2818】 最近点 动态树分治+可持久化线段树
题目大意:给你一颗n个节点的树,最初点集S为空. 有m次操作:往当前点集S中加入/删除一个点,询问点x至集合S中任意点的最小距离,回到第t次修改点集的操作后的状态. 数据范围:$n,m≤10^5$ 我 ...
- 【rocketMQ】1、搭建MQ服务器,生产一个订单与消费一个订单
1. 先解压 2. maven编译安装.(注意虚拟机采用nat网络模式,需要联网) mvn -Prelease-all -DskipTests clean install -U 启动nameser节点 ...
- Vue2.5开发去哪儿网App 第四章笔记 下
1.解决非父子组件之间的传值问题 非父子组件传值(Bus/总线/发布订阅模式/观察者模式) 给 Vue类上挂在一个属性,然后创建vue实例时,实例就拥有了这个属性 Vue.prototype.bus ...
- javascript数据结构与算法---二叉树(删除节点)
javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...
- 解决ubuntu安装系统默认没有创建root用户
安装ubuntu操作系统的时候,默认没有设置root账户的步骤!!! 这样在操作系统安装完成之后,就没有root用户, 一般,当前的普通用户,如果需要执行一些命令的时候,只要在命令前边加上sudo就行 ...
- Mysql 和 Postgresql 抛开性能的对比
MySQL/MariaDB的当前版本是5.7.6(MariaDB为MySQL创建者Monty Widenius创建的一个MySQL分支),PostgreSQL的版本是9.4.1. 以下几个方面对比两者 ...
- MySQL笔记(4)---表
1.前言 上一章记录了MySQL中的一些文件组成,以及相关作用和参数配置,本章开始记录深层次的存储结构,以便更好理解MySQL的设计. 2.索引组织表 InnoDB中,表都是根据主键顺序组织存放的,这 ...