У меня есть скрипт 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