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

  • 相关阅读:
    struts2 标签 前台遍历 字符串数组 String[]
    007-服务器域名&上传网站
    006-DOS命令
    005-OSI七层模型&IP地址
    004-编程语言发展史
    003-计量单位
    002-B/S架构&C/S架构
    001-计算机的组成
    1083. List Grades (25)
    1037. Magic Coupon (25)
  • 原文地址:https://www.cnblogs.com/leee/p/5355147.html
Copyright © 2011-2022 走看看