Ben etrafta arama yaptım ve cevaplamaya çalıştığım tam bir soru bulamıyorum veya bana açıklayacak birine ihtiyacım var Temel olarak, Net kütüphanesini kullanan bir Node.js betiğim var. Birden çok ana bilgisayara bağlanıyorum ve komut gönderiyorum ve dönüş verilerini dinliyorum.Node.js net kütüphanesi: 'data' olayından tüm verileri alma
var net = require('net');
var nodes = [
'HOST1,192.168.179.8',
'HOST2,192.168.179.9',
'HOST3,192.168.179.10',
'HOST4,192.168.179.11'
];
function connectToServer(tid, ip) {
var conn = net.createConnection(23, ip);
conn.on('connect', function() {
conn.write (login_string); // login string hidden in pretend variable
});
conn.on('data', function(data) {
var read = data.toString();
if (read.match(/Login Successful/)) {
console.log ("Connected to " + ip);
conn.write(command_string);
}
else if (read.match(/Command OK/)) { // command_string returned successful,
// read until /\r\nEND\r\n/
// First part of data comes in here
console.log("Got a response from " + ip + ':' + read);
}
else {
//rest of data comes in here
console.log("Atonomous message from " + ip + ':' + read);
}
});
conn.on('end', function() {
console.log("Lost conncection to " + ip + "!!");
});
conn.on('error', function(err) {
console.log("Connection error: " + err + " for ip " + ip);
});
}
nodes.forEach(function(node) {
var nodeinfo = node.split(",");
connectToServer(nodeinfo[0], nodeinfo[1]);
});
Veriler iki parçaya bölünmüş olarak biter. Verileri bir karede saklasam ve ilk bölümü/\ r \ nEND \ r \ n/sınırlayıcısını okuduğumda kalan kısmı eklesem bile ortada bir eksik eksik var. Komple iletiyi akıştan aldığımdan emin olmak için verileri düzgün bir şekilde nasıl yedeklerim?
DÜZENLEME: Tamam, bu daha iyi çalışıyor gibi görünüyor:
function connectToServer(tid, ip) {
var conn = net.createConnection(23, ip);
var completeData = '';
conn.on('connect', function() {
conn.write (login_string);
});
conn.on('data', function(data) {
var read = data.toString();
if (read.match(/Login Successful/)) {
console.log ("Connected to " + ip);
conn.write(command_string);
}
else {
completeData += read;
}
if (completeData.match(/Command OK/)) {
if (completeData.match(/\r\nEND\r\n/)) {
console.log("Response: " + completeData);
}
}
});
conn.on('end', function() {
console.log("Connection closed to " + ip);
});
conn.on('error', function(err) {
console.log("Connection error: " + err + " for ip " + ip);
});
}
Benim en büyük sorunu olasılıkla bir mantık hatası oldu. Ya cevap başlatan öbekleri ya da onu bitiren yığınları bekliyordum. Aradaki her şeyi kurtarmıyordum.
Eğer tüm Node-ish'ları bu konuda almak istiyorsam, tam bir mesaj geldiğinde (boş satırdan başlayarak, bir satırda "END" ile biten) bir olayı tetiklemeliyim. orada işleniyor.
Bir parçanın eksik olduğunu nasıl tespit ediyorsunuz? Konsolda oturum açan hata ayıklama mesajlarından mı? –
manuel olarak yapılarak yan yana karşılaştırma. –