gpt4 book ai didi

node.js - Socket.io 1.3.7 忽略选项

转载 作者:太空宇宙 更新时间:2023-11-03 22:53:13 25 4
gpt4 key购买 nike

我有一个 node.js 脚本,当客户端连接时,它会读取并转储 Mongo DB 的内容。我刚刚从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 套接字连接,而不是保持轮询 session 。 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

最佳答案

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

解决方案是在引用之前设置选项。例如:

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

// ...

关于node.js - Socket.io 1.3.7 忽略选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com