所需环境:SignalR运行在.NET 4.5平台上,这里演示时采用ASP.NET MVC 3;

一.简介

ASP .NET SignalR 是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信。

二.原理

其实现原理跟WCF或Remoting相似,均为使用远程代理来实现。实现接口有2种分别是PersistentConnection 和 Hubs,其中PersistentConnection 是实现长时间js轮循的,Hub是用来解决实时信息交换问题,其利用js动态载入方法实现,客户端与服务器端全部使用json来交换数据。

三.Demo创建

1.打开NuGet 安装 Microsoft ASP.NET SignalR

2.实现

a).实现PersistentConnection

添加myconnection.cs文件

namespace MvcApplicationSignalR
{public  class myconnection : PersistentConnection{protected override Task OnReceivedAsync(string clientId, string data){// Broadcast data to all clientsdata = string.Format("数据是:{0} 时间是:{1}", data, DateTime.Now.ToString());//return Connection.Broadcast(data);return Send(clientId, data);}}
}

在Global.asax.cs文件中注册一下代码(第3行):

protected void Application_Start()
{RouteTable.Routes.MapConnection<myconnection>("echo","echo/{*operation}");AreaRegistration.RegisterAllAreas();RegisterGlobalFilters(GlobalFilters.Filters);RegisterRoutes(RouteTable.Routes);
}

在前台页面中添加如下html代码:

<script type="text/javascript">$(function () {var connection = $.connection('echo');connection.received(function (data) {$('#messages').append('<li>' + data + '</li>');});connection.start();$("#broadcast").click(function () {connection.send($('#msg').val());});$("#btnStop").click(function () {connection.stop();});});
</script>
<h2>@ViewBag.Message</h2>
<input type="text" id="msg" />
<input type="button" id="broadcast" value="发送" />
<input type="button" id="btnStop" value="停止" />
<ul id="messages">
</ul>

执行效果如下:

可在

protectedoverrideTask OnReceivedAsync(stringclientId, stringdata)

方法中进行消息的监视。

b).实现Hubs

新建Chat.cs类,代码如下:

namespace MvcApplicationSignalR
{[HubName("chat")]public class Chat : Hub{public void Send(string clientName, string message){Clients.addSomeMessage(clientName, message);}}
}

前台模板html代码如下:

<head><meta charset="utf-8" /><title>@ViewBag.Title</title><link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /><script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/jquery-1.6.4.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/jquery-ui-1.8.24.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/jquery.signalR-0.5.3.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script><script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script></head>

后台代码如下:

public ActionResult HubChat()
{ViewBag.ClientName = "用户-" + Rnd.Next(1, 9);return View();
}

对应的视图代码为:

@model dynamic
@{ViewBag.Title = "title";
}
<script src="@Url.Content("~/Scripts/hubDemo.js")" type="text/javascript"></script>
<script type="text/javascript">$(document).ready(function () {});
</script>
<h2>Hub Chat</h2>
<div><input type="text" id="Placeholder" value="@ViewBag.ClientName" hidden="true"/><input type="text" id="msg" /><input type="button" id="broadcast" value="广播" /><br /><br /><h3>消息记录: (你是:<span id="MyClientName">@ViewBag.ClientName</span>):</h3><ul id="messages"></ul>
</div>

hubDemo.js所对应的内容如下:

$(function () {var myClientName = $('#Placeholder').val();// Proxy created on the flyvar chat = $.connection.chat;// Declare a function on the chat hub so the server can invoke itchat.addSomeMessage = function (clientName, message) {writeEvent('<b>' + clientName + '</b> 对大家说: ' + message, 'event-message');};$("#broadcast").click(function () {// Call the chat method on the serverchat.send(myClientName, $('#msg').val()).done(function () {console.log('Sent message success!');}).fail(function (e) {console.warn(e);});});// Start the connection$.connection.hub.start();//A function to write events to the pagefunction writeEvent(eventLog, logClass) {var now = new Date();var nowStr = now.getHours() + ':' + now.getMinutes() + ':' + now.getSeconds();$('#messages').prepend('<li class="' + logClass + '"><b>' + nowStr + '</b> ' + eventLog + '.</li>');}
});

资源:

一个很酷的同步操作表格的示例(使用 jTable ):

http://www.codeproject.com/Articles/315938/Real-time-Asynchronous-Web-Pages-using-jTable-Sign

组通知示例:

http://www.codeproject.com/Articles/404662/SignalR-Group-Notifications

先写到这里,以后在深度研究

转载于:https://blog.51cto.com/tongling/1243787

.Net使用SignalR实现消息推送功能预研及Demo相关推荐

  1. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  2. AngularJS+ASP.NET MVC+SignalR实现消息推送

    AngularJS+ASP.NET MVC+SignalR实现消息推送 原文:AngularJS+ASP.NET MVC+SignalR实现消息推送 背景 OA管理系统中,员工提交申请单,消息实时通知 ...

  3. php 企业号文本消息推送,Python如何实现微信企业号文本消息推送功能的示例

    这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python微信企业号 ...

  4. tornado服务器动态文件,tornado 实现服务器消息推送功能

    这篇文章介绍tornado 服务器消息推送功能服务器端与客户端实现的的方法. 消息推送的过程: 客户端1 连接请求,服务器先hold 住,别返回: 客户端2 发送消息,服务器把信息返回给 客户端1. ...

  5. nodejs android 推送,利用Nodejs怎么实现一个微信小程序消息推送功能

    利用Nodejs怎么实现一个微信小程序消息推送功能 发布时间:2021-01-20 13:55:29 来源:亿速云 阅读:92 作者:Leah 今天就跟大家聊聊有关利用Nodejs怎么实现一个微信小程 ...

  6. openfire消息通知推送_APP消息推送功能之前端后台设计

    APP消息推送功能之前端后台设计 最近有不少小伙伴问APP消息推送功能,前端.后台如何设计的?消息系统的架构是什么样的?最近刚好做到后台消息推送这块,简单谈谈个人心得,欢迎拍砖. 消息推送是让自己的用 ...

  7. java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能

    其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...

  8. 小程序云开发之消息推送功能

    小程序云开发之消息推送功能(图文) 一:新建项目 APPID获取方法:1.在微信公众平台上注册账号,选择小程序(也可以从服务号注册,前提你有一个服务号)注册后登录,登录时微信扫码验证一下 2.填写小程 ...

  9. 微信小程序消息推送功能开发(java实现)

    先好好把官方文档看一看,链接https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push ...

最新文章

  1. Nucleus SE RTOS初始化和启动
  2. mongodb的shell命令
  3. android数字累加,Android自己设置View之数字自动增长
  4. 【LeetCode笔记】136. 只出现一次的数字(Java、位运算)
  5. w7系统计算机里没有摄像头,win7系统没有摄像头不能视频的几种原因和解决方法...
  6. SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。
  7. (123)FPGA面试题-介绍低速接口(UART、IIC、SPI),SPI有几根线,每根线的作用?(三)
  8. 【CCCC】L2-024 部落 (25分),,并查集,模板水题,统计集合个数
  9. webview加载百度失败_移动AI系列百度paddle.js在助力开发智能化的微信小程序
  10. ASP程序部署在IIS上的步骤
  11. orl_faces数据集分享
  12. 荣耀手机如何批量删除日历日程?日历日程提醒便签
  13. 网站劫持原理及分析网站被劫持了有几种解决方法
  14. oracle rac实现,炼数成金Oracle 12C RAC集群原理与管理实战 16课
  15. 主机开启后,显示器显示NO SIGNAL,无信号
  16. NetApp ADP (Advanced drive partitioning) 介绍
  17. 企业应该怎样选择mes系统?
  18. 教你轻松调DCT和ICC之间Timing与Congestion的一致性
  19. 神经网络架构搜索(NAS)综述
  20. 安装wxpython for Python3.5

热门文章

  1. js-在url后面添加时间戳清除浏览器打开页面的缓存
  2. 概要设计阶段--组装测试计划
  3. 【ccf-csp201512-5】矩阵
  4. GIT SSH连接遇到到的问题
  5. SQL For Xml
  6. 学习IT技术你需要的是书?视频教程?还是老师?
  7. iOS开发那些事-故事板实现标签导航
  8. 巧用CSS提升表格呈现性能
  9. Spring Boot 使用Thymeleaf
  10. 利用JavaScript的复制