间隔发送文件套接字
Interval send file socket
我有一个代码 运行 每两小时一次,需要通过套接字发送结果。我已经完成了所有设置,第一次一切顺利。然而,第二次调用该函数时,它不再起作用。为了演示它,我将我的函数连接到一个时间间隔:
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 也不行。
编辑:进一步说明;我需要这个的原因是因为服务器可能会脱机或其他原因。如果我只在脚本启动时建立连接,它是不一致的。
我已经开始工作了。问题是这会多次启动套接字及其所有事件侦听器。此外,'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);
关闭接收服务器只会报错,重新启动后即可正常使用。一切都很好。
我有一个代码 运行 每两小时一次,需要通过套接字发送结果。我已经完成了所有设置,第一次一切顺利。然而,第二次调用该函数时,它不再起作用。为了演示它,我将我的函数连接到一个时间间隔:
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 也不行。
编辑:进一步说明;我需要这个的原因是因为服务器可能会脱机或其他原因。如果我只在脚本启动时建立连接,它是不一致的。
我已经开始工作了。问题是这会多次启动套接字及其所有事件侦听器。此外,'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);
关闭接收服务器只会报错,重新启动后即可正常使用。一切都很好。