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秒钟显示一次服务器时间。

  • 相关阅读:
    DV型、OV型、EV型证书的主要区别
    HTTPS混合内容解析
    Resin 4.0 部署SSL证书
    中间证书的使用
    IBM LOTUS DOMINO 9 部署SSL证书
    F5部署SSL证书
    百度云部署SSL证书
    阿里云部署SSL证书
    加密,解密web.config数据库连接字符串
    不记得oracle管理员密码,更改oracle sys密码的方法
  • 原文地址:https://www.cnblogs.com/dudu/p/mvc_comet_multipart_xmlhttprequest.html
Copyright © 2011-2022 走看看