Socket.IO不使用回退方法

我有一个节点服务器运行一个socket.io服务器和一个客户端来使用它。 简单的故事,我需要能够在两者之间传递信息。 这是在支持Web套接字的浏览器中按预期工作,但是当需要使用后备方法时,它不起作用。 我应该提到,页面是从apache服务器提供的,节点服务器仅用于特定的页面。 我正在使用的代码如下,我已经修理了一段时间,不知道如何解决这个问题。

另外值得一提的是,当页面在IE9中打开(websockets不支持),logging 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"); }); }); 

好吧,经过这么多的努力后,我发现了一个解决scheme,使套接字在旧的浏览器工作。

从版本1.0开始,Socket.io使用Engine.io而不是后备方法,后者负责传输。 为了得到一个工作解决scheme,我跳过使用Socket.io图层,而只是使用Engine.io。 在客户端你有类似的东西

 var connection = eio.Socket('host-address'); 

然后你只是绑定常规事件(如消息,closures)。

而在服务器部分而不是require('Socket.IO'),你可以调用require('Engine.IO'),例如:

 var engineio = require('engine.io'); var wss = engineio.listen(10101); 

绑定是一样的。