Socket.io 1.3.7 忽略选项
Socket.io 1.3.7 ignoring options
我有一个 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); }
});
当客户端连接时,它仍然会升级到网络套接字连接,而不是保持轮询会话。 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
问题是您试图在 options
实际设置之前使用它。变量本身 是 在 JavaScript 中提升的,但它们的赋值不是。这意味着您实际上是在传递 undefined
(这可能会导致加载默认值)而不是您的 options
对象。
解决方法是在引用之前设置options
。例如:
var options = {
allowUpgrades: false,
transports: [ 'polling' ],
pingTimeout: 5000,
pingInterval: 2500
};
var io = require('socket.io')(8002, options);
// ...
我有一个 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); }
});
当客户端连接时,它仍然会升级到网络套接字连接,而不是保持轮询会话。 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
问题是您试图在 options
实际设置之前使用它。变量本身 是 在 JavaScript 中提升的,但它们的赋值不是。这意味着您实际上是在传递 undefined
(这可能会导致加载默认值)而不是您的 options
对象。
解决方法是在引用之前设置options
。例如:
var options = {
allowUpgrades: false,
transports: [ 'polling' ],
pingTimeout: 5000,
pingInterval: 2500
};
var io = require('socket.io')(8002, options);
// ...