Я создаю Node JS клиент TCP, который получает данные молнии, анализирует их и сохраняет как CSV. Я выяснил сторону соединения / загрузки, но я столкнулся с проблемой, когда некоторое время входящие данные TCP в порядке, но тогда одна из входящих строк будет неполной и все сбросит. Я думаю, что проблема заключается в том, что данные поступают быстрее, чем обрабатываются и сохраняются, и поэтому существует отставание.
Вот мой код:
function cleanStringFn(string, superBad){
string = string.replace(new RegExp(superBad, 'g'), '')
.replace(new RegExp('}{', 'g'), ']]]')
.replace(new RegExp('{', 'g'), '')
.replace(new RegExp('}', 'g'), '')
return string
}
client.on('data', function(data) {
var dataString = data.toString()
var stringArray = dataString.split('{')
var superBad = stringArray[0]
var cleanString = cleanStringFn(dataString, superBad)
var cleanArray = cleanString.split(']]]')
var dataArray = []
cleanArray.map(curr=>{
var addCurly = '{' + curr + '}'
var toJSON = JSON.parse(addCurly)
dataArray.push(toJSON)
})
var unparse = Papa.unparse(dataArray)
fs.appendFile('./data/file.txt', data, (err) => {
if (err) throw err;
});
});
client.on('error', function(ex) {
console.log("handled error");
});
Вся вещь "superBad" заключается в том, что данные, поступающие с сервера, выглядят так: 0x00,0x00,0x00,0xC2 {"time": "2014-09-05T16: 21: 22.918060726Z", "тип": 1, "широта": 40.2352633, "долгота": 26.2417332, "peakCurrent": 2767, "icHeight": 18211.49, "numSensors": 6, " eeMajor ": 1128," eeMinor ": 465," eeBearing ": 6}
вся вещь" 0x00,0x00,0x00,0xC2 ", кажется, отбрасывает узел, потому что он печатает его как знак вопроса внутри квадрат и все сбрасывает.
Мне интересно, неужели мое мнение о внезапной остановке канала связано с тем, что данные поступают быстрее, чем обрабатываются. Если да, то как мне решить эту проблему? И если это не кажется правдоподобным, есть другие идеи?