【转】Asp.net MVC Comet推送
原文链接:http://www.cnblogs.com/kissdodog/p/4283485.html
一、简介
在Asp.net MVC实现的Comet推送的原理很简单。
服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回。
客户端:请求异步Action,当接收到一个返回时,立即又再发送一个。
缺点:会长期占用一个Asp.net处理线程。但相比于轮询,其节省了带宽。
示例:
新建一个Controller如下:
//Comet服务器推送控制器(需设置NoAsyncTimeout,防止长时间请求挂起超时错误)[NoAsyncTimeout, SessionState(SessionStateBehavior.ReadOnly)]public class CometController : AsyncController //需要继承自异步的AsyncController{/// <summary>/// 异步方法,处理客户端发起的请求/// </summary>public void IndexAsync(){AsyncManager.OutstandingOperations.Increment();AsyncManager.Parameters["info"] = "怎么了";AsyncManager.OutstandingOperations.Decrement();}/// <summary>/// 当异步线程完成时向客户端发送响应/// </summary>/// <param name="token">数据封装对象</param>/// <returns></returns>public ActionResult IndexCompleted(string info){return Json(info, JsonRequestBehavior.AllowGet);}}
随便找一个页面,通过AJAX请求这一个异步Action:
<html> <head><title>AJAX测试</title><script src="/Content/jquery-1.10.2.min.js"></script><script type="text/javascript">$(function () {getCometServerPush();})function getCometServerPush() {$.ajax({cache: false,url: '/Comet/Index',success: function (data) {$("#info").html(data);getCometServerPush();}});}</script> </head> <body><div id="info"></div> </body> </html>
上面的示例,如果你在Action上下一个断点,会不停的看到断点在循环。说明异步客户端不停地在推送。当然这个示例仅仅是说明推送的原理。
二、应用
应用:监控服务器上的一个txt文件,当有变化时,推送内容到客户端。
//Comet服务器推送控制器(需设置NoAsyncTimeout,防止长时间请求挂起超时错误)[NoAsyncTimeout, SessionState(SessionStateBehavior.ReadOnly)]public class CometController : AsyncController //需要继承自异步的AsyncController{/// <summary>/// 异步方法,处理客户端发起的请求/// </summary>public void IndexAsync(){AsyncManager.OutstandingOperations.Increment();FileSystemWatcher FSW = new FileSystemWatcher();FSW.Filter = "123.txt"; //仅仅监控123.txt文件FSW.Path = Server.MapPath(@"/"); //设置监控路径FSW.EnableRaisingEvents = true; //启动监控//FileSystemWatcher暂时有个多次触发的问题,但与本推送示例无关,故不解决FSW.Changed += (object source, FileSystemEventArgs e) =>{AsyncManager.Parameters["info"] = System.IO.File.ReadAllText(Server.MapPath(@"/123.txt"),System.Text.Encoding.Default); ;AsyncManager.OutstandingOperations.Decrement();};}/// <summary>/// 当异步线程完成时向客户端发送响应/// </summary>/// <param name="token">数据封装对象</param>/// <returns></returns>public ActionResult IndexCompleted(string info){return Json(info, JsonRequestBehavior.AllowGet);}}
转载于:https://www.cnblogs.com/xpengfee/p/4629518.html
【转】Asp.net MVC Comet推送相关推荐
- PHP:ServerPush (Comet推送) 技术的探讨
PHP中Push(推送)技术的探讨 [http://vistaswx.com/blog/article/php-server-push] 随着人们对Web即时应用需求的不断上升,Server Pus ...
- 使用ASP语言向百度主动推送网址的方法和经验分享
最近在网站SEO优化中接触到了百度站长平台中的向百度主动推送网址的功能.百度开放了API接口给站长,以便广大站长进行调用,主动推送网址.可是百度给出的API调用示例没有ASP语言的,经过搜索相关文章, ...
- push msg php_基于web-msg-sender进行消息推送
简介 web-msg-sender是一款web长连接推送框架,采用PHPSocket.IO开发,基于WebSocket长连接通讯,如果浏览器不支持WebSocket则自动转用comet推送. 通过后台 ...
- AJAX推送与拉取方式的比较
下面这些可以实现基于web的实时事件通知的方法.在他们的实验性研究中,作者们在一个利用COMET推送方式实现(Dojo的Cometd库)的AJAX应用和一个纯拉取方式的应用之间,对数据一致性.服务器性 ...
- 基于 WEB 的实时事件通知方式 服务器推送
下面这些可以实现基于web的实时事件通知的方法.在他们的实验性研究中在一个利用COMET推送方式实现(Dojo的Cometd库,dwr的反向Ajax)的AJAX应用和一个纯拉取方式的应用之间,对数据一 ...
- php实现Web消息推送框架
文章来源:http://www.workerman.net/web-sender web-msg-sender是一款web长连接推送框架,采用PHPSocket.IO开发,基于WebSocket长连接 ...
- 在 Asp.NET MVC 中使用 SignalR 实现推送功能
一,简介 Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送 ...
- C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表
本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何 ...
- AngularJS+ASP.NET MVC+SignalR实现消息推送
AngularJS+ASP.NET MVC+SignalR实现消息推送 原文:AngularJS+ASP.NET MVC+SignalR实现消息推送 背景 OA管理系统中,员工提交申请单,消息实时通知 ...
最新文章
- php列表显示教程,Dedecms后台管理文档列表显示自定义字段方法教程
- win7下设置无线上网
- Burpsuite学习(4) 1
- ASP.NET Core 3.x启动时运行异步任务(一)
- mysql全局变量的使用_mysql - 变量的使用
- Docker下安装GitLab
- MapReduce on Yarn 的流程和架构图
- a服务器读取b服务器文件乱码,java 读取oracle中文乱码
- 视频上传接口测试实践
- android自动循环播放视频,Android编程实现VideoView循环播放功能的方法
- 如何制作龙芯系统安装U盘
- 【经典】zheng项目搭建
- 使用ffmpeg合并mp4文件
- Android 3D模型展示
- SQL常用的一些关键字
- jquery slideToggle 动画问题
- basler相机出现buffer不足的解决方案
- 软考论文的六大应对策略V1.0
- 基于爬虫的数据分析--Python3抓取网易云音乐原理及实践
- 银行供应链金融业务的数字化转型方案探析 | 金融科技时代
热门文章
- Docker中运行Springboot jar时的变量传递
- JVM内存区域:常用指令集
- zookeeper 常用命令示例
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四)
- C++设计模式--工厂方法模式
- myeclipse中,项目上有个叉报错,文件没有错误
- matlab中如何添加注释
- 记录gitee再次提交和错误提示
- 1.2 操作系统的发展和分类(手工、单道/多道批处理、分时、实时、网络、分布式、嵌入式、个人计算机)
- php 请求url 返回json,php解析请求url并返回json数据