博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net MVC Comet推送
阅读量:7247 次
发布时间:2019-06-29

本文共 2255 字,大约阅读时间需要 7 分钟。

一、简介

  在Asp.net MVC实现的Comet推送的原理很简单。

  服务器端:接收到服务器发送的AJAX请求,服务器端并不返回,而是将其Hold住,待到有东西要通知客户端时,才将这个请求返回。

  客户端:请求异步Action,当接收到一个返回时,立即又再发送一个。

  缺点:会长期占用一个Asp.net处理线程。但相比于轮询,其节省了带宽。

  示例:

  新建一个Controller如下:

//Comet服务器推送控制器(需设置NoAsyncTimeout,防止长时间请求挂起超时错误)    [NoAsyncTimeout, SessionState(SessionStateBehavior.ReadOnly)]    public class CometController : AsyncController   //需要继承自异步的AsyncController    {        ///         /// 异步方法,处理客户端发起的请求        ///         public void IndexAsync()        {            AsyncManager.OutstandingOperations.Increment();            AsyncManager.Parameters["info"] = "怎么了";            AsyncManager.OutstandingOperations.Decrement();        }        ///         /// 当异步线程完成时向客户端发送响应        ///         /// 数据封装对象        /// 
public ActionResult IndexCompleted(string info) { return Json(info, JsonRequestBehavior.AllowGet); } }

  随便找一个页面,通过AJAX请求这一个异步Action:

    AJAX测试            

  上面的示例,如果你在Action上下一个断点,会不停的看到断点在循环。说明异步客户端不停地在推送。当然这个示例仅仅是说明推送的原理。

二、应用

  应用:监控服务器上的一个txt文件,当有变化时,推送内容到客户端。

//Comet服务器推送控制器(需设置NoAsyncTimeout,防止长时间请求挂起超时错误)    [NoAsyncTimeout, SessionState(SessionStateBehavior.ReadOnly)]    public class CometController : AsyncController   //需要继承自异步的AsyncController    {        ///         /// 异步方法,处理客户端发起的请求        ///         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();            };        }        ///         /// 当异步线程完成时向客户端发送响应        ///         /// 数据封装对象        /// 
public ActionResult IndexCompleted(string info) { return Json(info, JsonRequestBehavior.AllowGet); } }

  更多流逼的功能,留着读者自由发挥。

   

  

 

转载地址:http://xynbm.baihongyu.com/

你可能感兴趣的文章
重温数据结构-线性表(王德仙)2012-04-07
查看>>
Java面试官最常问的volatile关键字
查看>>
自动化测试笔记
查看>>
UVA10018 Reverse and Add
查看>>
NUC1178 Kickdown
查看>>
Android Widget(窗口小部件)
查看>>
字符判断和字符映射
查看>>
12、Libgdx的图像之全屏和垂直同步
查看>>
2018年5月19日笔记
查看>>
理解和运用javascript中的call及apply
查看>>
二、python小功能记录——监听鼠标事件
查看>>
ARM指令adr adrl ldr mov
查看>>
微信小程序中通过腾讯地图进行逆地址解析报错message: "请求来源未被授权, 此次请求来源域名:servicewechat.com"...
查看>>
数据结构13——Trie
查看>>
朴素贝叶斯
查看>>
VUE-CLI 设置页面title
查看>>
Newtonsoft.Json
查看>>
RabbitMq集群搭建
查看>>
django初用的一些问题
查看>>
实现调用百度的接口来实现翻译
查看>>