构树|gopush集群推送兼容ie方案

更新时间:2019-08-05    来源:浏览器    手机版     字体:

【www.bbyears.com--浏览器】

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 := `
          
           
           
           
            request-headers-from domain="*.pztai.cn" headers="*"/>
           
`
    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));
                }
            }
        }

本文来源:http://www.bbyears.com/bangongshuma/60233.html

热门标签

更多>>

本类排行