2012-05-07 8 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名」と「joinChannel |メイン」からAS3クライアント。 NodeJSはそれを1つのデータパケットとして読み取ります。
私の質問は、2つの異なるデータパケットとしてそれを作る方法です?

+0

2つの文字を区切る文字は何ですか。新しい行?パケットそのものを制御することはできません。 – loganfsmyth

+0

はい、それは新しい行です – Gugis

+0

AS3コード:\t server.send( "setUser |" + name_txt.text)+ "\ n"; \t server.send( "joinChannel | aha")+ "\ n"; – Gugis

答えて

1

通常、すべてのデータをまとめてバッファリングし、それを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; 
    } 
    }); 
});