gopush集群推送兼容ie方案

gopush支持tcp 和 websocket 两种协议,在移动端和新浏览器中,可以用tcp与websocket来解决实时推送,但是ie9以下版本IE浏览器是不支持websocket的,一般都是用长轮训来替换websocket,作者发话说短期内不考虑long-polling方式,这里就用flash的方案解决。

首先需要对gopush进行代码调整,以便适应flash 的安全策略

在web/http.go里面加入

 代码如下 复制代码
    httpServeMux.HandleFunc("/crossdomain.xml", CrossDomain)

然后在web/handle.go加入

 代码如下 复制代码
func CrossDomain(w http.ResponseWriter, r *http.Request) {
    hp := `<?xml version="1.0" ?>
           <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
            <cross-domain-policy>
            <site-control permitted-cross-domain-policies="all"/>
            <allow-access-from domain="*.pztai.cn"/>
            <allow-http-request-headers-from domain="*.pztai.cn" headers="*"/>
            </cross-domain-policy>`
    io.WriteString(w, hp)
}

然后在gopush下边建立新的文件夹flash,建立main.go

监视843端口,如果有请求,就返回crossdomain.xml内容,断开连接即可

最后用as3写普通的socket代码连接即可,核心代码如下

 代码如下 复制代码

private function sendHead():void{
            //发送协议
            var protocol:String = "*3\r\n$3\r\nsub\r\n$" + key.length+"\r\n"+key+ "\r\n$"+ hearbeattime.toString().length+ "\r\n" + hearbeattime.toString() + "\r\n";
            socket.writeUTFBytes(protocol);
            socket.flush();

        }
private function socketGetData(data:ProgressEvent):void{
            if(socket.bytesAvailable){
                var msg:String = socket.readUTFBytes(socket.bytesAvailable);
                if(msg.charAt(0) == '+'){
                    if(!heatbeatTimer.running){
                        socketok = true;
                        heatbeatTimer.start();
                    }
                    if(reconnectTimer.running){
                        reconnectTimer.stop();
                    }
                }else if(msg.charAt(0) == '$'){
                    var msgArr:Array = msg.split("\r\n");
                    var msgString:String = msgArr[1];
                    ExternalInterface.call("asCallBack"," " + encodeURI(msgString));
                }
            }
        }

时间: 2024-12-26 18:07:29

gopush集群推送兼容ie方案的相关文章

Redis集群Proxy支持select命令方案介绍

目前Redis集群开源的方案主要有Redis Cluster,Codis,Twemproxy等,这几个方案里面都不支持select命令,即用户无法使用select进行逻辑db的切换,这样会给之前使用Redis单机的用户带来一定困扰,导致很多用户在迁移到集群方案的时候需要改造代码,本文探讨Redis集群支持select命令的方案实现. 阿里云Redis集群 阿里云的redis集群版由3大组件构成: redis-config : 集群管理工具 redis-server : 优化过源码的redis,支

Windows Phone开发(43):推送通知第一集——Toast推送

原文:Windows Phone开发(43):推送通知第一集--Toast推送 好像有好几天没更新了,抱歉抱歉,最近"光荣"地失业,先是忙于寻找新去处,唉,暂时没有下文.而后又有一些琐事要办,不过不要紧,今天咱们继续. 动画的内容就告一段落,本系列文章只作简单引导,不会覆盖每一个细节,最终能不能学好,就完全看各位自己了.   从本节开始,我们将讨论推送通知,这个东西不太好理解,而推送通知的原理和过程,如果你看MSDN的示意图,相信你会有点晕,若不,我帖出给你看看.  算了,不帖,不知怎

基于Redis Sentinel的Redis集群(主从Sharding)高可用方案(转)

本文主要介绍一种通过Jedis&Sentinel实现Redis集群高可用方案,该方案需要使用Jedis2.2.2及以上版本(强制),Redis2.8及以上版本(可选,Sentinel最早出现在Redis2.4中,Redis2.8中Sentinel更加稳定),Redis集群是以分片(Sharding)加主从的方式搭建,满足可扩展性的要求: Redis Sentinel介绍 Redis Sentinel是Redis官方提供的集群管理工具,主要有三大功能: 监控,能持续监控Redis的主从实例是否正常

腾讯正式发布“信鸽”推送平台,可结合腾讯大数据划分用户标签进行分群推送

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;     腾讯今天正式对外发布其推送平台"信鸽",面向开发者免费开放其推送能力.根据信鸽的官方介绍,"信鸽是移动 app 推送平台,通过 API 调用或者 Web 端的可视化操作,实现对特定用户发送通知 / 消息,提升用户活跃度.激活沉睡用户,并可实时查看推送效果". 在推送技术上,信鸽支持与十亿级智能终端的稳定长连接,可以识别

消息推送选择什么方案对服务器压力最小?

问题描述 服务器端使用PHP+MySQL,客户端主要是Android和IOS设备,现在需要实现IM聊天的功能,涉及到消息推送.现在想到的两个方案:1.HTTP轮询,每隔一定时间(5秒)像服务器发送HTTP请求查询消息.2.使用XMPP或Socket,服务器主动推送消息请问这两种方案哪种对服务器的压力最小?(假设暂不考虑消息的实时性)感谢各位!(如果能详细说明一下就更好了) 解决方案 轮询的话 问题是 每隔几秒都要去请求 比较耗电人人网聊天 XMPP,gmail好像也是 http://www.my

MongoDB高可用集群配置的几种方案

一.高可用集群的解决方案 高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性. 计算机系统的高可用在不同的层面上有不同的表现: (1)网络高可用 由于网络存储的快速发展,网络冗余技术被不断提升,提高IT系统的高可用性的关键应用就是网络高可用性,网络高可用性与网络高可靠性是有区别的,网络高可用性是通过匹配冗余的网络设备实现网络设备的冗余,达到高可用的目的. 比如冗余的交换机,冗余的路由器等

web集群服务的负载均衡方案选择与实现

web 集群系统,是由一群同时运行同一个web应用的服务器组成的集群系统,在外界看来,就像是一个服务器一样.为了均衡集群服务器的负载,达到优化系统性能的目的,集群服务器将众多的访问请求,分散到系统中的不同节点进行处理.从而实现了更高的有效性和稳定性,而这也正是基于Web的企业应用所必须具备的特性. 高可靠性可以看作为系统的一种冗余设定.对于一个特定的请求,如果所申请的服务器不能进行处理的话,那么其他的服务器能不能对之进行有效的处理呢?对于一个高效的系统,如果一个Web服务器失败的话,其他的服务器

hbase 学习(十三)集群间备份原理

集群建备份,它是master/slaves结构式的备份,由master推送,这样更容易跟踪现在备份到哪里了,况且region server是都有自己的WAL 和HLog日志,它就像mysql的主从备份结构一样,只有一个日志来跟踪.一个master集群可以向多个slave集群推送,收到推送的集群会覆盖它本地的edits日志. 这个备份操作是异步的,这意味着,有时候他们的连接可能是断开的,master的变化不会马上反应到slave当中.备份个格式在设计上是和mysql的statement-based

Android应用中消息推送完美方案分享

1.消息推送基础 消息推送,就是在互联网上通过定期传送用户需要的信息来减少信息过载的一项新技术.推送技术通过自动传送信息给用户,来减少用于网络上搜索的时间.它根据用户的兴趣来搜索.过滤信息,并将其定期推给用户,帮助用户高效率地发掘有价值的信息 当我们开发需要和服务器交互的移动应用时,基本上都需要和服务器进行交互,包括上传数据到服务器,同时从服务器上获取数据. 一般情况下,客户端与服务器之间通讯客户端是主动的,但这就存在一个问题就是一旦服务器数据有更新或者服务器要下发通知给客户端只能等客户端连接的