原文链接: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推送相关推荐

  1. PHP:ServerPush (Comet推送) 技术的探讨

    PHP中Push(推送)技术的探讨  [http://vistaswx.com/blog/article/php-server-push] 随着人们对Web即时应用需求的不断上升,Server Pus ...

  2. 使用ASP语言向百度主动推送网址的方法和经验分享

    最近在网站SEO优化中接触到了百度站长平台中的向百度主动推送网址的功能.百度开放了API接口给站长,以便广大站长进行调用,主动推送网址.可是百度给出的API调用示例没有ASP语言的,经过搜索相关文章, ...

  3. push msg php_基于web-msg-sender进行消息推送

    简介 web-msg-sender是一款web长连接推送框架,采用PHPSocket.IO开发,基于WebSocket长连接通讯,如果浏览器不支持WebSocket则自动转用comet推送. 通过后台 ...

  4. AJAX推送与拉取方式的比较

    下面这些可以实现基于web的实时事件通知的方法.在他们的实验性研究中,作者们在一个利用COMET推送方式实现(Dojo的Cometd库)的AJAX应用和一个纯拉取方式的应用之间,对数据一致性.服务器性 ...

  5. 基于 WEB 的实时事件通知方式 服务器推送

    下面这些可以实现基于web的实时事件通知的方法.在他们的实验性研究中在一个利用COMET推送方式实现(Dojo的Cometd库,dwr的反向Ajax)的AJAX应用和一个纯拉取方式的应用之间,对数据一 ...

  6. php实现Web消息推送框架

    文章来源:http://www.workerman.net/web-sender web-msg-sender是一款web长连接推送框架,采用PHPSocket.IO开发,基于WebSocket长连接 ...

  7. 在 Asp.NET MVC 中使用 SignalR 实现推送功能

    一,简介 Signal 是微软支持的一个运行在 Dot NET 平台上的 html websocket 框架.它出现的主要目的是实现服务器主动推送(Push)消息到客户端页面,这样客户端就不必重新发送 ...

  8. C# ASP.NET MVC 之 SignalR 学习 实时数据推送显示 配合 Echarts 推送实时图表

    本文主要是我在刚开始学习 SignalR 的技术总结,网上找的学习方法和例子大多只是翻译了官方给的一个例子,并没有给出其他一些经典情况的示例,所以才有了本文总结,我在实现推送简单的数据后,就想到了如何 ...

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

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

最新文章

  1. php列表显示教程,Dedecms后台管理文档列表显示自定义字段方法教程
  2. win7下设置无线上网
  3. Burpsuite学习(4) 1
  4. ASP.NET Core 3.x启动时运行异步任务(一)
  5. mysql全局变量的使用_mysql - 变量的使用
  6. Docker下安装GitLab
  7. MapReduce on Yarn 的流程和架构图
  8. a服务器读取b服务器文件乱码,java 读取oracle中文乱码
  9. 视频上传接口测试实践
  10. android自动循环播放视频,Android编程实现VideoView循环播放功能的方法
  11. 如何制作龙芯系统安装U盘
  12. 【经典】zheng项目搭建
  13. 使用ffmpeg合并mp4文件
  14. Android 3D模型展示
  15. SQL常用的一些关键字
  16. jquery slideToggle 动画问题
  17. basler相机出现buffer不足的解决方案
  18. 软考论文的六大应对策略V1.0
  19. 基于爬虫的数据分析--Python3抓取网易云音乐原理及实践
  20. 银行供应链金融业务的数字化转型方案探析 | 金融科技时代

热门文章

  1. Docker中运行Springboot jar时的变量传递
  2. JVM内存区域:常用指令集
  3. zookeeper 常用命令示例
  4. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(四)
  5. C++设计模式--工厂方法模式
  6. myeclipse中,项目上有个叉报错,文件没有错误
  7. matlab中如何添加注释
  8. 记录gitee再次提交和错误提示
  9. 1.2 操作系统的发展和分类(手工、单道/多道批处理、分时、实时、网络、分布式、嵌入式、个人计算机)
  10. php 请求url 返回json,php解析请求url并返回json数据