Signalr信息推送
前序
距离上次写文章,差不多已经大半年了。感觉自己越来越懒了,即使有时候空闲下来了,也不想动。前面买了一系列的Python的书,基础的看了大概有四分之一,剩下的基本上还未动,晚上回去也只是吃饭看电影。最近发现头偶尔开始痛了,欢迎是颈椎出问题,这周准备去看看。希望大家也多注意自己的身体,有什么 不舒服的及时发现,及时治疗。好了,扯远了,今天无意之间看到了关于Signalr的一些资料和demo,顿时觉得十分有用,遂花了一点时间,参考博友的资料,自己动手做了一个,再次记录下来,希望能给需要的朋友提供点帮助,也给自己的知识库增加的养料。有错误的地方,还望大家批评指出!
Signalr简介
ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信。实时通信:让客户端(Web页面)和服务器端可以互相通知消息及调用方法,当然这是实时操作的。
Signalr使用
1.新建一个mvc项目。(这里我使用的是vs2015) 这里关于MVC的详细就不赘述了,直接上项目结构,包括页面、控制器等,可能2015以下的结构有所不同。

2.选中项目,添加引用---管理NuGet包程序包,在弹出的对话框中,搜索Signalr,如图:

点击安装,安装提示步骤一步一步的安装。
3.代码
a.首先在Startup中app.MapSignalR();注册SignalR管道。
using Microsoft.Owin;
using Owin; [assembly: OwinStartupAttribute(typeof(SignalrPushInformation.Startup))]
namespace SignalrPushInformation
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
}
}
}
b.添加信息处理类,需要继承Hub,这里我统一放在Models文件中。数据存储由于个人原因,这个地方我直接使用了字典的方式,大家可以存到数据中。
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System.Collections; namespace SignalrPushInformation.Models
{
[HubName("PushMessage")]
public class PushMessage : Hub
{ public void Init()
{
} public void Push(string title, string message)
{
this.InsertMsg(title, message);
// 调用所有客户端的sendMessage方法
Clients.All.sendMessage(title, message);
}
private void InsertMsg(string title, string message)
{
Message msg = new Message();
msg.Title = title;
msg.MsgContent = message;
MsgQueue.Insert(msg);
}
}
}
这里需要指出‘sendMessage’方法是自定义的方法,会在客户端的时候使用,参数与客户需要一致,名称随意。
c.发送信息view
@{
ViewBag.Title = "SendMessage";
}
<title>发送消息</title>
<script src="/Scripts/jquery-1.10.2.min.js"></script>
<script src="/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="/signalr/hubs"></script>
<script type="text/javascript">
$(function () {
// 引用自动生成的集线器代理,这里的PushMessage,需要和信息处理类名称一致
var chat = $.connection.PushMessage;
// 定义服务器端调用的客户端sendMessage来显示新消息,sendMessage方法需要信息处理类中的方法一致,参数一致
chat.client.sendMessage = function (title, message) {
// 向页面发送接收的消息
sendMsg();
};
// 集成器连接开始,
$.connection.hub.start()
.done(function () {
// 服务连接完成,给发送按钮注册单击事件
$('#sendmessage').click(function () {
// 调用服务器端集线器的Send方法,push方法需要信息处理类中的方法一致
chat.server.push($("#title").val(), $('#message').val());
});
sendMsg();
})
.fail(function () {
console.log("Could not Connect!");
});
});
function sendMsg() {
var options = {
url: '/Message/MsgCount',
type: 'post',
success: function (data) {
$("#count").html(data.count);
}
};
$.ajax(options);
}
</script>
<h2>
发送消息
</h2>
<div>
<label>我的消息:</label>
<span style=" color:red; font-size:30px;" id="count"></span>条
</div>
<p>
<div>
标题:
<input type="text" id="title" />
</div>
<br /><br />
<div>
内容:
<textarea id="message" rows="" cols=""></textarea>
</div>
<br /><br />
<div>
<input type="button" id="sendmessage" value="发送" />
</div>
</p>
d.接收信息view
@{
ViewBag.Title = "ReceiveMessage";
}
<title>接受消息</title>
<script src="/Scripts/jquery-1.10.2.min.js"></script>
<script src="/Scripts/jquery.signalR-2.2.0.min.js"></script>
<script src="/signalr/hubs"></script>
<script type="text/javascript">
$(function () {
// 引用自动生成的集线器代理
var chat = $.connection.PushMessage;
// 定义服务器端调用的客户端sendMessage来显示新消息,sendMessage方法需要信息处理类中的方法一致,参数一致
chat.client.sendMessage = function (title, message) {
// 向页面发送接收的消息
MsgCount(false);
$("#msgcontent").after("<div>标题:" + title + ",消息内容:" + message + "</div>");
};
// 集成器连接开始
$.connection.hub.start().done(function () {
MsgCount(true);
}).fail(function () {
console.log("Could not Connect!");
});
});
function MsgCount(init) {
var options = {
url: '/Message/MsgCount',
type: 'post',
success: function (data) {
if (data != null) {
$("#count").html(data.count);
console.log(data.msg);
if (init) {
$.each(data.msg, function (n, m) {
$("#msgcontent").append("<div>标题:" + m.Title + ",消息内容:" + m.MsgContent + "</div>");
});
}
}
}
};
$.ajax(options);
}
</script>
<h2>
接收消息
</h2>
<div>
<label>我的消息:</label>
<span style="color: red; font-size: 30px; margin-right:10px;" id="count"></span>条
<br />
<br />
<div id="msgcontent"></div>
</div>
f.控制器代码
using SignalrPushInformation.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace SignalrPushInformation.Controllers
{
public class MessageController : Controller
{
// GET: Message
public ActionResult ReceiveMessage()
{
return View();
} public ActionResult SendMessage()
{
MsgQueue.Insert(new Message()
{
MsgContent = "zcy",
Title = "zcy"
});
return View();
}
[HttpPost]
public JsonResult MsgCount()
{
return Json(new { count = MsgQueue.GetCount(), msg = MsgQueue.Dequeue() });
}
}
}
好了,一切都OK了,只需要编译生成,执行就行。详细的解释已经全部在代码中了,这个地方就不详细的说明。
留在最后
从开通博客到现在,了了的几篇文章,发现自己真的是太懒了。有时感觉真的不善于表达,想写点什么,但是不知道怎么写。后续的想对Python写一个系列,加深对Python的理解。虽然前面完整的看过一次基础的教程,但是发现还是有很多不懂的地方,希望以博客的形成,能加深自己的理解,也想改掉自己懒的毛病,,希望能让博客来监督我吧。
最后老规矩,源码!(密码:MT4E)
Signalr信息推送的更多相关文章
- Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)
简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...
- MVC 中使用 SignalR 实现推送功能
MVC 中使用 SignalR 实现推送功能 一,简介 Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Pus ...
- WinForm中 Asp.Net Signalr消息推送测试实例
p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能 [转]
在 Asp.NET MVC 中使用 SignalR 实现推送功能 罗朝辉 ( http://blog.csdn.net/kesalin ) CC许可,转载请注明出处 一,简介 Signal 是微软支持 ...
- 史上最全面的SignalR系列教程-3、SignalR 实现推送功能-集线器类实现方式
1.概述 通过前两篇 史上最全面的SignalR系列教程-1.认识SignalR 史上最全面的SignalR系列教程-2.SignalR 实现推送功能-永久连接类实现方式 文章对SignalR的介绍, ...
- spring boot metrics信息推送开发
上一篇文章是关于 “spring boot +RabbitMQ +InfluxDB+Grafara监控实践” 主要讲spring boot应用新能监控信息的收集方案实践 实践是hystrix信息推送的 ...
- Pushlet实现后台信息推送(二)
上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢.问题的关键就是那个SessionID,Push ...
- php 微信客服信息推送失败 微信重复推送客服消息 40001 45047
/*** * 微信客服发送信息 * 微信客服信息推送失败 微信重复推送客服消息 40001 45047 * 递归提交到微信 直到提交成功 * @param $openid * @param int $ ...
- 使用 SignalR 实现推送功能
百度搜索:使用 SignalR 实现推送功能
随机推荐
- IntelliJIDEA永久注册使用
1. 首先下载本地IntelliJIDEA注册服务机(没有密码哦) http://pan.baidu.com/s/1hsyZp0C 2.解压后进入解压的文件夹,找到自己操作系统对应的版本,我这里使用 ...
- P3014 [USACO11FEB]牛线Cow Line && 康托展开
康托展开 康托展开为全排列到一个自然数的映射, 空间压缩效率很高. 简单来说, 康托展开就是一个全排列在所有此序列全排列字典序中的第 \(k\) 大, 这个 \(k\) 即是次全排列的康托展开. 康托 ...
- aspx <%= %> 绑定变量问题及解决方法
aspx页面,前台页面需要用到后台变量字段的时候我们一般使用 <%= 变量 %>,多数情况下使用正常. 但是有的时候就会遇到变量解析被编码的情况,特别是是在head当中css引用lin ...
- 科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解)
一:TVTK的管线 使用管线技术将TVTK中各个对象穿连起来,几乎所有渲染引擎都会提到管线技术 在TVTK中,每个对象只需要实现相对简单的任务,整个管线则能根据用户的需求,实现复杂的数据可视化处理. ...
- spring框架学习(六)AOP事务及spring管理事务方式之Template模板
概念 1.事务 1)事务特性:ACID 原子性 :强调事务的不可分割. 一致性 :事务的执行的前后数据的完整性保持一致. 隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰. 持久性 :事务一旦 ...
- spring-boot Test for Controller
spring-boot controller 测试示例: 单元测试类 package com.zzhi; import com.fasterxml.jackson.databind.ObjectMa ...
- 【CC2530强化实训04】定时器间隔定时实现按键N连击
[CC2530强化实训04]定时器间隔定时实现按键N连击 [题目要求] 2018年全国职业院校技能大赛“物联网技术应用”国赛(高职组)中关于感知层开发的难度陡然增大,三个题目均在Zigbee ...
- celery简介
目录 Celery简介 Celery架构 中间件选择 Celery序列化 简单项目 Celery简介 celery userguide 知乎大神解释celery Celery(芹菜)是基于Python ...
- JS踩过的坑
一:DOM对象的查找 DOM的查找到的对象,除byID的之外,返回的都是一个数组,并不是DOM对象无法调用DOM对象的方法. 通过id查找: 因为id在一个HTML文件中唯一,因此查找到的只会是一个元 ...
- POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)
今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...