原文链接: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);
}
}
 

  

【转】Asp.net MVC Comet推送的更多相关文章

  1. Asp.net MVC Comet推送

    一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回. 客户 ...

  2. Asp.net MVC Comet 推送

    一.简介 在Asp.net MVC实现的Comet推送的原理很简单. 服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回. 客户 ...

  3. WinForm中 Asp.Net Signalr消息推送测试实例

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  4. C#—ASP.NET:集成极光推送(Push API v3)

    C#—ASP.NET:集成极光推送(Push API v3) 原文地址: https://blog.csdn.net/CXLLLK/article/details/86489994   1.极光推送官 ...

  5. comet 推送消息到客户端

    weiconfig: <system.web> <httpHandlers> <add path="comet_broadcast.ashx" typ ...

  6. 基于comet服务器推送技术(web实时聊天)

    http://www.cnblogs.com/zengqinglei/archive/2013/03/31/2991189.html Comet 也称反向 Ajax 或服务器端推技术.其思想很简单:将 ...

  7. [译]servlet3.0与non-blocking服务端推送技术

    Non-blocking(NIO)Server Push and Servlet 3 在我的前一篇文章写道如何期待成熟的使用node.js.假定有一个框架,基于该框架,开发者只需要定义协议及相关的ha ...

  8. web推送

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

  9. workman即时推送

    https://www.workerman.net/web-sender 下载源码解压后运行  start_for_win.bat  如果提示不成功,就把php路径配置到环境变量中去即可 运行后打开浏 ...

随机推荐

  1. 题解报告:hdu 1212 Big Number(大数取模+同余定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1212 Problem Description As we know, Big Number is al ...

  2. 应用交付、负载均衡(Load balancing)、高可用、F5

    “应用交付”,实际上就是指应用交付网络(Application Delivery Networking,简称ADN),它利用相应的网络优化/加速设备,确保用户的业务应用能够快速.安全.可靠地交付给内部 ...

  3. magento 自建插件通道服务

    首先建立如下的目录结构 在channel.xml中如此写上 <channel> <name>local</name> <uri>http://local ...

  4. IOS 绘制PDF -转

    -(void)createPdf:(UIImage *)img andText:(NSString *)text{ NSArray *paths = NSSearchPathForDirectorie ...

  5. 179 Largest Number 把数组排成最大的数

    给定一个非负整数的列表,重新排列它们的顺序把他们组成一个最大的整数.例如,给定 [3, 30, 34, 5, 9],最大的组成数是 9534330.注意: 结果可能非常大,所以您需要返回一个字符串而不 ...

  6. jacaScript数组

    1.var arr=['1','2','3'] typeof arr (判断数组类型)    print(arr)打印数组内容 2.arr[100]='x',  数组中间自动添加,alert(arr. ...

  7. web+ admin template,spa管理应用后台,easyui后台正式发布

    演示地址:http://admintemplate.webplus.org.cn/ v1.0 (2016/7/27) 扁平化风格 全屏支持 后台管理不使用iframe,全ajax开发 权限管理 商品管 ...

  8. openmv第一次调试

    2018-09-19  20:14:51 import sensor, image, time import car import json import time from pyb import U ...

  9. linux centos7 tomcat8 配置成服务启动

    1. tomact 解压到/usr/local/tomcat下 2.vim /usr/local/tomcat/bin/catalina.sh 在OS specific support.前加上 (注意 ...

  10. [Windows Server 2008] 404错误设置方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:如何设置4 ...