.Net使用SignalR实现消息推送功能预研及Demo
所需环境: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>
执行效果如下:
可在
protected
override
Task OnReceivedAsync(
string
clientId,
string
data)
方法中进行消息的监视。
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相关推荐
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- AngularJS+ASP.NET MVC+SignalR实现消息推送
AngularJS+ASP.NET MVC+SignalR实现消息推送 原文:AngularJS+ASP.NET MVC+SignalR实现消息推送 背景 OA管理系统中,员工提交申请单,消息实时通知 ...
- php 企业号文本消息推送,Python如何实现微信企业号文本消息推送功能的示例
这篇文章主要介绍了Python编程实现微信企业号文本消息推送功能,结合实例形式分析了Python微信企业号文本消息推送接口的调用相关操作技巧,需要的朋友可以参考下 本文实例讲述了Python微信企业号 ...
- tornado服务器动态文件,tornado 实现服务器消息推送功能
这篇文章介绍tornado 服务器消息推送功能服务器端与客户端实现的的方法. 消息推送的过程: 客户端1 连接请求,服务器先hold 住,别返回: 客户端2 发送消息,服务器把信息返回给 客户端1. ...
- nodejs android 推送,利用Nodejs怎么实现一个微信小程序消息推送功能
利用Nodejs怎么实现一个微信小程序消息推送功能 发布时间:2021-01-20 13:55:29 来源:亿速云 阅读:92 作者:Leah 今天就跟大家聊聊有关利用Nodejs怎么实现一个微信小程 ...
- openfire消息通知推送_APP消息推送功能之前端后台设计
APP消息推送功能之前端后台设计 最近有不少小伙伴问APP消息推送功能,前端.后台如何设计的?消息系统的架构是什么样的?最近刚好做到后台消息推送这块,简单谈谈个人心得,欢迎拍砖. 消息推送是让自己的用 ...
- java发送qq消息_Java点餐系统和点餐小程序新加微信消息推送功能
其实想给点餐系统加推送很久了,之前也有单门写过Java版的微信消息推送和云开发版的微信消息推送.之所以一直没有加,也是考虑到大家的学习接受度,因为做订阅消息推送是一个综合性的开发工作. 需要你既要会小 ...
- 小程序云开发之消息推送功能
小程序云开发之消息推送功能(图文) 一:新建项目 APPID获取方法:1.在微信公众平台上注册账号,选择小程序(也可以从服务号注册,前提你有一个服务号)注册后登录,登录时微信扫码验证一下 2.填写小程 ...
- 微信小程序消息推送功能开发(java实现)
先好好把官方文档看一看,链接https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push ...
最新文章
- Nucleus SE RTOS初始化和启动
- mongodb的shell命令
- android数字累加,Android自己设置View之数字自动增长
- 【LeetCode笔记】136. 只出现一次的数字(Java、位运算)
- w7系统计算机里没有摄像头,win7系统没有摄像头不能视频的几种原因和解决方法...
- SSE图像算法优化系列十八:三次卷积插值的进一步SSE优化。
- (123)FPGA面试题-介绍低速接口(UART、IIC、SPI),SPI有几根线,每根线的作用?(三)
- 【CCCC】L2-024 部落 (25分),,并查集,模板水题,统计集合个数
- webview加载百度失败_移动AI系列百度paddle.js在助力开发智能化的微信小程序
- ASP程序部署在IIS上的步骤
- orl_faces数据集分享
- 荣耀手机如何批量删除日历日程?日历日程提醒便签
- 网站劫持原理及分析网站被劫持了有几种解决方法
- oracle rac实现,炼数成金Oracle 12C RAC集群原理与管理实战 16课
- 主机开启后,显示器显示NO SIGNAL,无信号
- NetApp ADP (Advanced drive partitioning) 介绍
- 企业应该怎样选择mes系统?
- 教你轻松调DCT和ICC之间Timing与Congestion的一致性
- 神经网络架构搜索(NAS)综述
- 安装wxpython for Python3.5