Socket.io 1.3.7忽略了选项

时间:2015-12-06 02:14:18

标签: node.js socket.io socket.io-1.0

我有一个node.js脚本,当客户端连接读取和转储Mongo数据库的内容时。我刚刚从socket.io 0.9升级而缺乏示例&可怜的docs让我感到有些困惑。

我以前能够使用io.set('transports', ['xhr-polling'])设置选项,但这已被删除,我可以通过新的方式来定义选项就像这样

        {
        allowUpgrades: false,
        transports: [ 'polling' ],
        pingTimeout: 5000,
        pingInterval: 2500
        };

但......他们似乎被忽视了。

这是完整的node.js脚本;

var io = require('socket.io')(8002, options);
cp = require('child_process');
var tail = cp.spawn('test-scripts/k-test.rb');
    var options = {
        allowUpgrades: false,
        transports: [ 'polling' ],
        pingTimeout: 5000,
        pingInterval: 2500
        };

    //On connection do the code below//
    io.on('connection', function (socket) {
        console.log();


        //Read the state list from db//
        var connection_string = '127.0.0.1:27017/test';
        var mongojs = require('mongojs');
        var db = mongojs(connection_string, ['k1']);
        var k1 = db.collection('k1');
        db.k1.find({}, {'_id': 0, "data.time":0}).forEach(function(err, doc) {
            if (err) throw err;
            if (doc) { io.emit('k1', doc); }
            });

当客户端连接时,它仍然会升级到Web套接字连接,而不是保留为轮询会话。 pingTimeout& pingInterval不起作用 - 如果我从移动客户端连接,则从关闭浏览器到服务器说客户端已超时的时间至少需要1分钟。

任何人都可以指出我正确的方向,我会在哪里出错。如果有任何帮助,我可以提供旧的(0.9)代码。

更新: 修正了以下@mscdex的答案。对于其他任何人来说都是一个有用的注意事项 - 如果你启用了调试,那么在启动时读取选项时你应该得到这样的输出; socket.io:server creating engine.io instance with opts {"allowUpgrades":false,"transports":["polling"],"pingTimeout":10000,"pingInterval":5000,"path":"/socket.io"} +9ms

1 个答案:

答案 0 :(得分:4)

问题是您在实际设置之前尝试使用options。变量本身 在JavaScript中被提升,但他们的分配却没有。这意味着您实际上正在传入undefined(这可能导致加载默认值)而不是options对象。

解决方法是在引用之前设置options。例如:

var options = {
    allowUpgrades: false,
    transports: [ 'polling' ],
    pingTimeout: 5000,
    pingInterval: 2500
};
var io = require('socket.io')(8002, options);

// ...