Nodejs中socket.io在IE6下,智能发送一次请求
Nodejs中socket.io在IE6下,智能发送一次请求
socket.io模块在 IE6下 测试 ,连接服务器成功 第一句话 发送成功 发送第二句话服务器没接收任何数据 ,此后就服务器寄再也接收不到IE6发过来的数据 , 但仍然可以接收服务器信息 !不明真相 求高手解释 !ie7 发送接收正常!
代码如下。。。
前端: socket.on(‘news’, function (data){ alert(data.size); });
function sdd(){
var socket = io.connect();
socket.emit('pp', { my: 'data' });
}
后台:
var sss = 0; io.sockets.on(‘connection’,function(socket){ socket.on(‘pp’, function (data) { var xdd = setInterval(function(){ if(sss<11){ sss++; socket.emit(‘news’, { size: sss }); }else{ sss = 0; clearInterval(xdd); } },10);
});
socket.on('disconnect',function(){
console.log("DISCONNECTED FROM CLIENT");
});
});
0.0有人帮下么?
这个问题可能是由于IE6对长轮询(long-polling)的支持不完善导致的。Socket.IO 默认使用多种传输方式,其中一种是长轮询。IE6 在处理长轮询时可能会出现问题。
解决方法:
-
限制传输方式: 可以通过配置 Socket.IO 仅使用
jsonp-polling
,这样可以避免长轮询的问题。 -
使用最新的 Socket.IO 版本: 确保使用的是最新版本的 Socket.IO,因为新版本可能已经修复了IE6的兼容性问题。
示例代码:
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
// 配置 Socket.IO 仅使用 jsonp-polling
io.set('transports', ['jsonp-polling']);
io.on('connection', function(socket) {
console.log('A user connected');
socket.on('message', function(msg) {
console.log('Message received: ' + msg);
socket.emit('response', 'Server received your message: ' + msg);
});
socket.on('disconnect', function() {
console.log('User disconnected');
});
});
server.listen(3000, function() {
console.log('Server is listening on port 3000');
});
客户端代码:
<!DOCTYPE html>
<html>
<head>
<title>Socket.IO Test</title>
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
</head>
<body>
<input type="text" id="message" placeholder="Type a message...">
<button onclick="sendMessage()">Send</button>
<script>
var socket = io.connect('http://localhost:3000', { transports: ['jsonp-polling'] });
function sendMessage() {
var msg = document.getElementById('message').value;
socket.emit('message', msg);
document.getElementById('message').value = '';
}
socket.on('response', function(data) {
alert(data);
});
</script>
</body>
</html>
解释:
-
服务端:
- 使用
io.set('transports', ['jsonp-polling'])
来限制 Socket.IO 使用 jsonp-polling 传输方式。 - 监听客户端的消息并返回响应。
- 使用
-
客户端:
- 使用
io.connect
连接到服务器,并指定使用jsonp-polling
。 - 当用户点击按钮时,发送消息到服务器。
- 接收服务器的响应并显示一个弹窗。
- 使用
这样可以确保在 IE6 下也能正常工作。