我有一个运行套接字的节点服务器。IO服务器和使用它的客户机。简单的故事,我需要能够在两者之间传递信息。这在支持web套接字的浏览器中是正常工作的,但是当需要使用回退方法时,它就不起作用了。我应该提到,页面是从apache服务器提供的,节点服务器仅用于特定的页面。我使用的代码如下,我已经修补了一段时间,不知道如何修复它。
还值得一提的是,当页面在IE9中打开时(不支持websockets),log connection.io.engine.transport.name会返回"websocket"。
客户: connection = io(window.location.protocol + '//localhost:8888', {
'reconnect': false,
'max reconnection attempts': 0,
'transports':
[
'websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling'
]
});
connection.on('connect',function () {
console.log("Socket is open");
$('#dc-status').hide();
connection.emit('message',JSON.stringify(info));
connection.on('message',function (e) {
//DO SOMETHING WITH THE DATA RECIEVED
});
});
服务器:Var ioserver = require('socket.io');
var io = ioserver.listen(8888);
var http = require("http");
console.log("server started...");
io.set('transports',[
'websocket',
'flashsocket',
'htmlfile',
'xhr-polling',
'jsonp-polling'
]);
io.sockets.on('connection', function(ws) {
var req;
var order;
var courier;
var after;
var session;
var options = {};
console.log("New client connected");
// console.log("Transport: " + io.transports[ws.id].name);
ws.on('message', function(data) {
//WORK WITH THE DATA RECEIVED
//NOT RELEVANT TO EXAMPLE
console.log('received: %s', data);
parsedData = JSON.parse(data);
});
ws.on('disconnect', function () {
console.log("Connection closed");
});
});
好了,经过一番努力,我找到了一个解决方案,使套接字在旧浏览器中工作。
从1.0版本开始。io使用Engine。IO而不是处理传输的回退方法。为了得到一个有效的解决方案,我跳过了使用Socket。io层,只使用Engine。io。在客户端,你有像
这样的东西var connection = eio.Socket('host-address');
,然后绑定常规事件(e。G message, close).
在服务器部分,而不是require('Socket.IO'),你调用require('Engine.IO'),示例:
var engineio = require('engine.io');
var wss = engineio.listen(10101);