我有一个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也没有。
编辑:进一步澄清;我需要这个的原因是因为服务器可能会脱机或者其他什么。如果我只在脚本启动时建立连接,则它不一致。
答案 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);
关闭接收服务器只会出错,一旦重新启动它就会起作用。一切都很好。