套接字.IO不使用回退方法



我有一个运行套接字的节点服务器。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);

相关内容

  • 没有找到相关文章