我有一个运行socket.io服务器的节点服务器和一个使用它的客户端。简单的故事,我需要能够在两者之间传递信息。这在支持Web套接字的浏览器中按预期工作,但是当需要使用回退方法时,它不起作用。 我应该提到页面是从apache服务器提供的,节点服务器仅用于特定页面。我正在使用的代码如下,我已经对此进行了一段时间的修改,并且无法弄清楚如何修复它。
另外值得一提的是,当在IE9中打开页面时(不支持websockets), 登录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");
});
});
答案 0 :(得分:2)
好的,所以经过多次努力,我找到了一个解决方案,让套接字可以在旧浏览器中运行。
从版本1.0开始,Socket.io使用Engine.io而不是后备方法,它负责传输。 为了获得一个可行的解决方案,我跳过了使用Socket.io层而只使用了Engine.io。 在客户端你有类似的东西
var connection = eio.Socket('host-address');
然后你只需绑定常规事件(例如,消息,关闭)。
在服务器部分而不是require('Socket.IO')中,你调用require('Engine.IO'),例如:
var engineio = require('engine.io');
var wss = engineio.listen(10101);
绑定是一样的。