2

このコードから改行を削除するにはどうすればよいですか?

socket.on('data', function(data){
    console.log('Data in server, sending to handle()');
    worker.handle(data, socket);
});

Worker.handle():

exports.handle = function handle(command, socket) {
console.log('Data sent to handle()');
command = command.toString();

console.log(コマンド);

編集:

私はこの出力を得ています:

test data
[newline]

編集2:

継続的なコードは次のとおりです。

if (command === 'look') {
    //stuff
}
if (command === 'login') {
    //stuff
4

1 に答える 1

3

これは表示/表示の問題ではありません。これは、データ伝送プロトコルに関連する問題です。ソケットはストリーム指向のプロトコルであり、メッセージベースではないことを意味します。その間、メッセージベースのように使用しています。これは可能ですが、送信者と受信者が各メッセージの開始と終了を識別するためのプロトコルを定義する必要があります。

これを言って、あなたが尋ねていることに基づいて、私はあなたがあなたのメッセージ終了マーカーとして改行(またはその変形)を使用することに決めたと思います。これを適切に機能させるには、受信データでその改行を積極的に探して、各メッセージの終わりを認識し、処理する前にメッセージを取り除く必要があります。

次のコードは、socket.onメソッドを置き換えて、必要な結果を得る必要があります。

// define your terminator for easy reference, changes
var msgTerminator = '\n';
// create a place to accumulate your messages even if they come in pieces
var buf;

socket.on('data', function(data){
    // add new data to your buffer
    buf += data;

    // see if there is one or more complete messages
    if (buf.indexOf(msgTerminator) >= 0) {
        // slice up the buffer into messages
        var msgs = buf.split(msgTerminator);

        for (var i = 0; i < msgs.length - 2; ++i) {
            // walk through each message in order
            var msg = msgs[i];

            // pick off the current message
            console.log('Data in server, sending to handle()');
            // send only the current message to your handler
            worker.handle(msg, socket);
        }

        buf = msgs[msgs.length - 1];  // put back any partial message into your buffer
    }
});
于 2012-07-29T05:05:13.360 に答える