2012-05-07 4 views
2

Когда мне нужно разделить данные, я должен преобразовать его в строку.
Вот моя функция обработчика данных:Разделение данных сокета NodeJS

socket.on('data', function (data) { 
    var str = data.toString().split("|"); 
    switch(str[0]){ 
     case "setUser": 
     setUser(str[1], socket); 
     break; 
     case "joinChannel": 
     joinChannel(str[1], socket); 
     break; 
    } 

    }); 

Когда я посылаю данные, такие как «SETUSER | Name», а затем «joinChannel | главный» от клиента AS3. NodeJS считывает его как один пакет данных.
Мой вопрос заключается в том, как сделать это как два разных пакета данных?

+0

Какой символ разделяет две части? Новая линия? У вас нет контроля над самими пакетами. – loganfsmyth

+0

Да, это новая строка – Gugis

+0

Код AS3: \t server.send ("setUser |" + name_txt.text) + "\ n"; \t server.send ("joinChannel | aha") + "\ n"; – Gugis

ответ

1

Обычно вы должны буферизировать все данные вместе, а затем проанализировать его как одну строку. Или, если вам нужно разделить его по мере его поступления, тогда вы сделаете расщепление в обратном вызове data и будете отслеживать любые оставшиеся частичные команды для добавления на полученном сетевом куске.

var data = ''; 
socket.setEncoding('utf8'); 
socket.on('data', function(chunk) { 
    data += chunk; 
}); 
socket.on('end', function() { 

    var lines = data.split('\n'); 
    lines.forEach(function(line) { 
    var parts = line.split('|'); 
    switch (parts[0]) { 
     case 'setUser': 
     setUser(str[1], socket); 
     break; 
     case 'joinChannel': 
     joinChannel(str[1], socket); 
     break; 
    } 
    }); 
}); 
Смежные вопросы