zoukankan      html  css  js  c++  java
  • html5:服务器事件推送(server-sent events)Asp.net

    支持


    不支持IE

    个人理解说明


    个人理解:这种消息推送方式不太推广,原因有以下三点~~~`我怎么老是学这些自己认为不会推广的东西呢~汗

    • 在.net中,framework4.5以上就可以由SignalR来实现消息推送。

    • 而这种h5的消息推送,是页面基于WebSocket不断轮训后台才打到目的,本质和Ajax设置定时器不断轮训一个道理,推广还有待考察。

    • 由于IE的不支持 你懂的~如果要实现IE的支持,需要采用其他的方式:XDomainRequest代替XMLHttpRequest。具体参考http://www.ibm.com/developerworks/cn/web/1307_chengfu_serversentevent/


    页面代码


    <!DOCTYPE html >
    <html>
    <head lang="zh-CN">
        <title></title>
        <script type="text/javascript">
            window.onload = EventPush;
            function EventPush() {
                if (typeof EventSource != "undefined") {
                    var source = new EventSource("MsgPush.ashx");
                    //e.data在onopen事件里是undefined
                    source.onopen = function (e) {
                        document.getElementById("result").innerHTML += "<br/>" + "onopen" + "<br/>";
                    };
                    source.onmessage = function (e) {
                        document.getElementById("result").innerHTML += "onmessage" + e.data + "<br/>" + e.target.url + "<br/>" + e.target.readyState + "<br/>";
                    };
                    //e.data在onerror事件里是undefined 
                    source.onerror = function (e) {
                        document.getElementById("result").innerHTML += "onerror" + "<br/>"; 
                    };
    
                }
                else {
                    document.getElementById("result").innerHTML = "不支持您老的浏览器~"
                }
            }
        </script>
    </head>
    <body>
        <div id="result">
            </div>
    </body>
    </html>
    
    

    Asp.net 一般处理程序


    using System;
    using System.Web;
    namespace accortion
    {
        /// <summary>
        /// MsgPush 的摘要说明
        /// </summary>
        public class MsgPush : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                //设置类型 
                context.Response.ContentType = "text/event-stream";
                //Provisional headers are shown
                //Accept:text/event-stream
                //Cache-Control:no-cache
                //context.Response.Headers.Set("Cache-Control", "no-cache"); //这种不行
                
                //禁止页面缓存的可行2种形式
                context.Response.Cache.SetNoStore();//Cache-Control:private, no-store//可以
                // TimeSpan TS = new TimeSpan(0);
                // context.Response.Cache.SetMaxAge(TS);//Cache-Control:private, max-age=0//可以
                string time = "data:" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "
    
    ";//数据前面必须以data:开头,后面必须有两个换行
                context.Response.Write(time);
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }
        
    

    参考


    http://www.ibm.com/developerworks/cn/web/1307_chengfu_serversentevent/
    https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events
    http://www.codeguru.com/csharp/csharp/cs_internet/displaying-real-time-data-using-html5-and-asp.net.htm

  • 相关阅读:
    ES6 学习笔记(整理一遍阮一峰大神得入门文档,纯自己理解使用)
    怪异模式和标准模式
    计算机网络七层协议模型 “开放系统互联参考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)
    流行得前端构建工具比较,以及gulp配置
    谈谈刚接触sea.js框架得看法
    MAC终端安装grunt--javascript世界得构建工具
    js的数组与对象关系
    JavaScript中的setInterval用法
    每周一题:平方数之和((更新JS)
    每周一题:拿硬币(更新JS)
  • 原文地址:https://www.cnblogs.com/leee/p/5355147.html
Copyright © 2011-2022 走看看