问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求websocket兼容低版本浏览器 web-js-php

发布网友 发布时间:2022-04-29 20:16

我来回答

1个回答

热心网友 时间:2022-05-15 11:11

演示下载地址: WebSocket兼容到低版本浏览器(演示实例)
页面代码比较简单,用法和正常的WebSocket基本一样,只是引用了WebSocket.js这个文件来兼容低版本浏览器。当然还有个WebSocket.swf需要放在与页面相同的目录下。
<script src="WebSocket.js"></script>
<script>
onload=function(){
var ws=new WebSocket("ws://127.0.0.1:8000");
ws.onopen=function(){
//握手成功
send.removeAttribute("disabled");
send.value="发送";
};
ws.onmessage=function(e){
//收到消息,放到页面上
var dl,dt,dd,o=eval("("+e.data+")");
dl=document.createElement("dl");
dt=document.createElement("dt");
dd=document.createElement("dd");
dt.innerHTML=o.client;
dd.appendChild(document.createTextNode(o.content));
dl.appendChild(dt);
dl.appendChild(dd);
wall.appendChild(dl);
wall.scrollTop=1E8; //滚动条移到底部
};
send.onclick=function(){
//发送消息
if(!message.value)return alert("请输入内容");
ws.send(message.value);
message.value="";
};
};
</script>
<style>
dl {margin:3px 10px;font:14px/20px Consolas,微软雅黑;}
dt {color:blue;}
#wall {
border:1px solid #CCC;width:200px;height:200px;
overflow-y:auto;margin-bottom:10px;
}
</style>
<div id="wall"></div>
<input id="message" />
<input type="button" value="连接中···" id="send" disabled /> 服务器程序使用NodeJS代码,随手写的聊天室功能,仅仅为了实现功能而已,作为演示代码不要吐槽考虑的不够周全。里面的 decodeDataFrame 和 encodeDataFrame 在之前的文章中有出现过,这里就不贴出来了。由于需要兼容AS版,所以服务器程序需要比普通的WebSocket多一个AS的域安全验证的步骤。这是关键所在,如果使用现成的WebSocket库之类的东西可能得稍微修改源码才能兼容AS版。
var crypto=require('crypto');
var fs=require('fs');
var WS='258EAFA5-E914-47DA-95CA-C5AB0DC85B11';

var pool=[]; //连接池

require('net').createServer(function(o){
var key;
o.on('data',function(e){
if(!key){
var data=e.toString();
//Flash握手
if(data=='<policy-file-request/>\0')
return fs.readFile('policy.txt',function(err,data){
o.write(data+'\0');
});
//WebSocket握手
if(key=data.match(/Sec-WebSocket-Key: (.+)|$/)[1])
key=crypto.createHash('sha1').update(key+WS).digest('base64'),
o.write([
'HTTP/1.1 101 Switching Protocols',
'Upgrade: websocket',
'Connection: Upgrade',
'Sec-WebSocket-Accept: '+key
].join('\r\n')+'\r\n\r\n');
}else{
//解析数据
var frame=decodeDataFrame(e);
//文本帧
if(frame.Opcode==1){
//转义数据
var content=frame.PayloadData.replace(/\W/g,function(e){
e=e.charCodeAt(0).toString(16);
if(e.length==3)e='0'+e;
return '\\'+(e.length>2?'u':'x')+e;
}),client=o.remoteAddress+":"+o.remotePort,buffer;
//包装成JSON格式,并做成一个数据帧
buffer=encodeDataFrame({
FIN:1,Opcode:1,
PayloadData:'{"client":"'+client+'","content":"'+content+'"}'
});
//对所有连接广播数据
for(i=0;i<pool.length;i++)pool[i].write(buffer);
};
};
});
//断开时从连接池中移除
o.on("close",function(){
for(i=0;i<pool.length;i++)if(pool[i]==o)pool.splice(i,1);
});
//放入连接池中
pool.push(o);
}).listen(8000); Flash握手就是AS的域安全验证,这个在之前的文章“ 使用AS直接与服务器TCP通信 ”中有详细的说过,其实就是加载一个策略文件给它。把这个过程嵌入到WebSocket的握手之前就行。
WebSocket.js的代码就不贴出来说明了。它负责构造一个类似原生WebSocket的接口的功能,里面会对不兼容WebSocket的浏览器加载WebSocket.swf来使之兼容。
这个程序也是最近刚写的,存在漏洞在所难免,如果实用的话以后将慢慢完善它。追问WebSocket.js 和WebSocket.swf帮忙给发下呗

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
我有个无线路由器 G11手机无法上wifi 已经按照路由说明书上步骤安装调... g11无线网显示以连接信号强但是一上网显示网络错误 拜求解 HTC G11能连接上WLAN,信号显示“极强”但上不去网? ...可是家里的能连上就是打不开网页,我的路由是上海贝尔的那种。_百度... 我的手机HTC G11 连接上WLAN,信号很好,就是无法上网 ...连上家里的无线网,但是qq却上不去,网页也打不开,等于没练上一样... G11WIFI信号格满但是打不开网页等 就生产力发展而言,丛西汉至唐朝有何表现 汉代农业的发展程度是怎么样的? 你好 酷管家密码忘了 打不开怎么办 关于websocket兼容低版本IE浏览器,该怎么处理 女生唱歌时声音像男生,而且高音唱不上去怎么办? 怎么样使websocket的兼容行提高,使其兼容ie8、火狐、谷歌等低版本的不... 求女生(声音比较低)唱歌的技巧 websocket怎么兼容低版本的浏览器 女生唱歌,声音顶不上去就得用假音,怎么把假音唱的像真音一样?? 我是女的,的嗓音比较低沉,怎么练唱歌? 我是女生唱歌声音太硬太低怎么办,平时说话很正常的,一唱歌就特别低,而且很硬,都不知道该怎么办了, 免烧砖试验规程和检验依据 办环保免烧砖厂需要哪些手续及到什么部门办理? 减肥肚脐贴,贴了真的会变瘦而且不反弹? 铁尾矿做免烧砖,通常需要检测哪两个指标? 一个电铃一般需要多大的电流才能正常工作 免烧砖制砖设备可以生产哪些砖?应用的领域有什么地方? 苹果手机米家门铃初始化失败怎么回事 我有一个红砖厂只能生产红砖产品单一,砖厂还有块空地想投资一个生产免烧砖厂,请问前期要多少钱啊? 我儿子说他同学家都安装门铃,准备也给家里安装一个合适点的科技门铃,哪种的会更好呢? 求一论文 冶金环保 360门铃电信版和移动版区别 要办免烧砖厂须关注的几条问题! websocket ie哪个版本支持 我是女生,唱歌声音比较低,自觉得自己五音不全,要唱什么歌会好些? 求救!唱歌声音太低沉了怎么办?!!! ie9支持websocket吗? 女生14岁声音沙哑 唱歌时低不下去 EasyWebsocket能否解决浏览器兼容性问题,性能怎么样 浏览器支持websocket吗 websocket支持哪些浏览器 win10按了ctrl+z把U盘里传过来的东西给弄没了 ...脚手架搭建项目,如何让es6语法兼容到低版本浏览器 宫斗的服饰 用什么洗衣服香味存得久 为什么有些人的衣服洗完后特别香?里面添加了什么东西? 汰渍洗衣液有什么功效? 有分不同的类型吗? 描写古代妃子的衣服,只需要一段 请问薰衣草的花语与百合的花语有什么不同? OKEX有qq群吗? 三人麻将自摸后,一摸几,是什么意思,要怎么打 哪种洗衣液好 打三人麻将技巧