Socket.io 1.3.7忽略选项

我有一个node.js脚本,当客户端连接读取和转储Mongo数据库的内容。 我刚刚从socket.io 0.9升级,缺乏示例和糟糕的文档让我有些困惑。

我曾经可以使用io.set('transports', ['xhr-polling'])来设置选项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-socket连接,而不是作为一个轮询会话。 pingTimeoutpingInterval不起作用 – 如果我从移动客户端连接,则从closures浏览器到服务器说客户端超时的时间至less需要1分钟。

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

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

问题是,你正在尝试使用options才能真正设置。 variables本身用JavaScript 挂起来的,但是他们的作业不是。 这意味着你实际上传入了undefined (这可能导致默认值被加载)而不是你的options对象。

解决scheme是在引用它之前设置options 。 例如:

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