gopush集群推送兼容ie方案

小潘seo 重庆小潘seo博客和你一起学习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加入如下代码:

  1. funcCrossDomain(whttp.ResponseWriter,r*http.Request){
  2. hp:=`<?xmlversion="1.0"?>
  3. <!DOCTYPEcross-domain-policySYSTEM"http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
  4. <cross-domain-policy>
  5. <site-controlpermitted-cross-domain-policies="all"/>
  6. <allow-access-fromdomain="*.pztai.cn"/>
  7. <allow-http-request-headers-fromdomain="*.pztai.cn"headers="*"/>//phpfensi.com
  8. </cross-domain-policy>`
  9. io.WriteString(w,hp)
  10. }

然后在gopush下边建立新的文件夹flash,建立main.go,监视843端口,如果有请求,就返回crossdomain.xml内容,断开连接即可,最后用as3写普通的socket代码连接即可,核心代码如下:

  1. privatefunctionsendHead():void{
  2. //发送协议
  3. 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";
  4. socket.writeUTFBytes(protocol);
  5. socket.flush();
  6. }
  7. privatefunctionsocketGetData(data:ProgressEvent):void{
  8. if(socket.bytesAvailable){
  9. varmsg:String=socket.readUTFBytes(socket.bytesAvailable);
  10. if(msg.charAt(0)=='+'){
  11. if(!heatbeatTimer.running){
  12. socketok=true;
  13. heatbeatTimer.start();
  14. }
  15. if(reconnectTimer.running){
  16. reconnectTimer.stop();
  17. }
  18. }elseif(msg.charAt(0)=='$'){
  19. varmsgArr:Array=msg.split("\r\n");
  20. varmsgString:String=msgArr[1];
  21. ExternalInterface.call("asCallBack",""+encodeURI(msgString));
  22. }
  23. }
  24. }

相关广告
  • gopush集群推送兼容ie方案 gopush集群推送兼容ie方案 gopush集群推送兼容ie方案
相关阅读

gopush集群推送兼容ie方案

2019/10/10 17:45:33 | 谷歌SEO算法 | 夫唯SEO视频教程