gopush集群推送兼容ie方案
2019/10/10/17:45:33 阅读:1762 来源:谷歌SEO算法 标签:
夫唯SEO视频教程
gopush 是金山开源的一个集群推送方案,支持1000k级别的推送,使用golang编写,性能是杠杠的,下面一小编来看看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加入如下代码:
- funcCrossDomain(whttp.ResponseWriter,r*http.Request){
- hp:=`<?xmlversion="1.0"?>
- <!DOCTYPEcross-domain-policySYSTEM"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
- <cross-domain-policy>
- <site-controlpermitted-cross-domain-policies="all"/>
- <allow-access-fromdomain="*.pztai.cn"/>
- <allow-http-request-headers-fromdomain="*.pztai.cn"headers="*"/>//phpfensi.com
- </cross-domain-policy>`
- io.WriteString(w,hp)
- }
然后在gopush下边建立新的文件夹flash,建立main.go,监视843端口,如果有请求,就返回crossdomain.xml内容,断开连接即可,最后用as3写普通的socket代码连接即可,核心代码如下:
- privatefunctionsendHead():void{
- //发送协议
- varprotocol: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();
- }
- privatefunctionsocketGetData(data:ProgressEvent):void{
- if(socket.bytesAvailable){
- varmsg:String=socket.readUTFBytes(socket.bytesAvailable);
- if(msg.charAt(0)=='+'){
- if(!heatbeatTimer.running){
- socketok=true;
- heatbeatTimer.start();
- }
- if(reconnectTimer.running){
- reconnectTimer.stop();
- }
- }elseif(msg.charAt(0)=='$'){
- varmsgArr:Array=msg.split("\r\n");
- varmsgString:String=msgArr[1];
- ExternalInterface.call("asCallBack",""+encodeURI(msgString));
- }
- }
- }
热门评论