zoukankan      html  css  js  c++  java
  • 用 ASP.NET MVC 实现基于 Multipart XMLHttpRequest 的 Comet

    Comet是什么?

    英文解释:Comet is a web application model in which a long-held HTTP request allows a web server to push data to a browser, without the browser explicitly requesting it. (来自wiki

    中文解释:Comet是基于 HTTP 长连接的“服务器推”技术(来自IBM developerWorks)。

    Multipart XMLHttpRequest是什么?

    英文解释:It is a method for bundling multiple HTTP requests into a single HTTP request and unbundling on the client side through a Javascript handler. (来自TechnoMagicians Blog

    中文解决:它允许客户端只用一个HTTP请求就可以从服务端向客户端传送多个资源(来自鼓浪鱼-前端博客)。

    为什么要用 ASP.NET MVC 实现?

    昨天学习了“反向Ajax,第1部分:Comet介绍”(英文版),但文中的代码服务端代码用的是Java。为了更好的理解这部分知识,实际体验一下,于是用ASP.NET MVC实现了其中一个示例 —— 基于 Multi-part XMLHttpRequest 的 Comet。

    这东西有实用价值吗?

    说实话,没有实用价值,只为学习之用。因为支持Multipart XMLHttpRequest的浏览器太少,目前只知道FireFox支持,Chrome与IE9都不支持。

    代码示例

    1. 前端JavaScript代码

    var xhr = $.ajaxSettings.xhr();
    xhr.multipart = true;
    xhr.open('GET', '/comet/multipart', true);
    xhr.onreadystatechange = function () {
    if (xhr.readyState == 4) {
    $('#logs').append(xhr.responseText+"<br/>");
    }
    };
    xhr.send(null);

    关键代码就是xhr.multipart = true;

    2. 服务端ASP.NET MVC 控制器代码

    public class CometController : Controller
    {
    //结束标志,这是随机生成的
    static string Boundary = "ABCDEFGHIJKLMNOPQRST";

    public ActionResult Multipart()
    {
    Response.ContentType = "multipart/x-mixed-replace;boundary=\"" + Boundary + "\"";
    Response.Headers.Add("Connection", "keep-alive");
    Response.Output.Write("--" + Boundary);
    Response.Flush();
    //每隔5秒种向客户端发送一次数据
    while (true)
    {
    //发送给客户端的数据的MIME类型,如果是JSON,就用application/json
    //注意这里一定要用WriteLine()
    Response.Output.WriteLine("Content-Type: plain/text");
    //这句生成空行的代码不能少
    Response.Output.WriteLine();
    Response.Output.WriteLine(DateTime.Now.ToString("HH:mm:ss.FFF"));
    //发送结束标志,客户端就知道完成了一次发送
    Response.Output.WriteLine("--" + Boundary);
    Response.Flush();
    System.Threading.Thread.Sleep(5000);
    }
    }
    }

    上面这段代码虽然看起来简单,但当时调试时还是费了一些周折。

    代码下载

    CometMvcDemo.rar

    需要在IIS中以集成模式运行该程序(以VS2010内置Web服务器运行会报错)。访问MultipartXhr.htm,会5秒钟显示一次服务器时间。

  • 相关阅读:
    A Node Influence Based Label Propagation Algorithm for Community detection in networks 文章算法实现的疑问
    Fast Newman-FN算法以及模块度定义介绍
    Label Propagation Algorithm LPA 标签传播算法解析及matlab代码实现
    设计一个smartnic
    Intel GEN11 GPU
    Intel GEN9 GPU
    Shared Virtual Memory (SVM) Functions
    connect via ssh to virtualbox guest vm without knowing ip address
    smartnic
    技术精品翻译
  • 原文地址:https://www.cnblogs.com/dudu/p/mvc_comet_multipart_xmlhttprequest.html
Copyright © 2011-2022 走看看