Socket.io在除IE8和9之外的每个平台上都能完美运行,这是客户端的要求。你能帮忙解决这个问题吗?
我一直在阅读所有类似的问题,但我发现的大多数解决方案都无法在IE8上解决这个问题。
这是结构:
服务器-SIDE
var ip = 'xxx.xxx.xxx.xxx';
var ipPort = '8081';
var app = require('http').createServer(handler);
var io = require('socket.io')(app);
var fs = require('fs')
app.listen(ipPort, function() {
//console.log('Listening at: http://'+ ip +':'+ ipPort +'');
});
//io.set('transports', ['websocket','flashsocket', 'htmlfile', 'xhr-polling', 'jsonp-polling']);
function handler (req, res) {
fs.readFile(__dirname + '/test.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
客户端
<html>
<body>
</body>
<script src="/socket.io/socket.io.js"></script>
<script>
alert("hi");
//var socket = io.connect('xxx.xxx.xxx.xxx:8081',{transports:'jsonp-polling');
var socket = io.connect(''xxx.xxx.xxx.xxx:8081',{secure: true});
socket.on('news', function (data) {
alert("hello data:"+data[0]);
socket.emit('my other event', { my: data });
});
socket.on('connect', function () {
alert("hello socket");
});
</script>
</html>
我没有任何错误,只是没有回复..我在socket.on('news')上放置了一个alert()并且没有得到任何反馈,但是我添加了socket.on('connect')并将alert()置于其中并弹出!!
希望有人在此之前通过这个问题并解决它。 我在win7和node(v0.10.30)socket.io(v1.0.6) 非常感谢所有的帮助。
答案 0 :(得分:2)
我发现这个问题的一个解决方案是在服务器端安装add express; 所有奇迹般的作品! (npm install express)
想知道我们是否都需要安装快递以避免这些问题.. mmmhh!
编辑: 显然,客户端代码中还有另外两个问题:
我在页面标题处添加了<!DOCTYPE html>
,并将socket.io外部脚本链接和代码移动到标记的末尾。所有问题都消失了。
答案 1 :(得分:1)
我注意到使用express和socket.io的问题(可能;不是100%确定真正的原因)与IE8,如果你重新加载一个带有套接字的网页,有时候新套接字会赢得功能适当
套接字服务器会丢失数据包,偶尔表示不加载网页;需要重新启动服务器来解决此问题。很容易观察到只是快速重新加载一个带有socket.io客户端的网页,它试图来回发送消息(我们的测试框架就是这样)。
我怀疑是快递,因为socket.io似乎挂钩表达,加载网页本身似乎偶尔会有问题。
在调查时我注意到套接字没有在页面卸载时自动断开连接,而是在服务器端看起来超时断开连接。
明确断开这种方式似乎解决了它(根据需要转换为您喜欢的框架):
$(window).on("beforeunload", function() {
socket.disconnect();
});