间隔发送文件套接字

时间:2015-12-29 18:38:29

标签: javascript socket.io setinterval

我有一个bihourly运行的代码,需要通过套接字发送结果。我已经完成了所有设置,第一次就可以了。但是,第二次调用该函数时,它不再起作用。为了证明这一点,我将我的功能连接到一个区间:

var soc = require('socket.io-client');
var fs = require('fs');
var ss = require('socket.io-stream');

var jsonfile = require('jsonfile');
var calculationResultsFile = './publicdata/CalculationResults.json';

function sendFile(){
    var calculationResultsFile = './publicdata/CalculationResults.json';
    var socket = new soc('http://localhost:1234', {
        'reconnection': false,
        'reconnectionDelay': 1000,
        'reconnectionDelayMax': 10000,
        'reconnectionAttempts': 5
    });
    socket.on( 'connect', function() {
        console.log('Sockets connected');
        var stream = ss.createStream();
        ss(socket).emit('sendData', stream, {name: 'jsonHourly'});
        fs.createReadStream(calculationResultsFile).pipe(stream);

        socket.on('completedstreamfile', function(){
            console.log('File send. Closed socket.');
            socket.close();
        });
    });
}


setInterval(function(){
    console.log('Interval start');
    sendFile()
}, 10000);

一些输出:

Interval start
Sockets connected
File send. Closed socket.
Interval start
Interval start
Interval start

我认为这是因为sendFile函数没有正确关闭。但是在socket.close()之后使用return也没有。

编辑:进一步澄清;我需要这个的原因是因为服务器可能会脱机或者其他什么。如果我只在脚本启动时建立连接,则它不一致。

1 个答案:

答案 0 :(得分:0)

我已经开始工作了。问题是这会多次启动套接字及其所有事件侦听器。此外,'forceNew'选项应该是真的。

var soc = require('socket.io-client');
var fs = require('fs');
var ss = require('socket.io-stream');

var jsonfile = require('jsonfile');
var calculationResultsFile = './publicdata/CalculationResults.json';


var calculationResultsFile = './publicdata/CalculationResults.json';
var socket = new soc('http://localhost:1234', {
    'reconnection': false,
    'forceNew': true
});
socket.on( 'connect', function() {
    console.log('Sockets connected');
    var stream = ss.createStream();
    ss(socket).emit('sendData', stream, {name: 'jsonHourly'});
    fs.createReadStream(calculationResultsFile).pipe(stream);
});
socket.on('completedstreamfile', function(){
    console.log('File send. Closed socket.');
    socket.disconnect();
});
socket.on('connect_error', function(err){
    console.log('Connection error: '+err);
});
socket.on('connect_timeout', function(){
    console.log('Connection timeout')
});

setInterval(function(){
    console.log('Interval start');
    socket.disconnect();
    socket.connect();
}, 40000);

关闭接收服务器只会出错,一旦重新启动它就会起作用。一切都很好。