2011-12-29 7 views
0

node.jsでメッセージ境界を検出するにはどうすればよいですか? クライアントは長さのメッセージを送信します。長さ+データnode.jsのメッセージ境界はどのようになっていますか?

socket.onデータはすべてのデータをオンラインで受信します。

しかし、最初に2バイトだけ、次にxバイトのデータを受け取る必要があります。

は、あなたが消費バイトをカウントし、プリアンブルから1に、この数を比較する必要があり、メッセージ境界はありません、あなた

答えて

0

TCPソケットがちょうどバイトストリームである感謝します。

ここでは、必要なことをするコードがあります。それはCoffeeScriptで書かれていて、メッセージサイズに32ビットintを使用するので、少し調整する必要があります。

remaining = 0 
    input = undefined 

    msgsize = 0 
    msbuf = new Buffer 4 
    msneeded = 4 

    sock.on 'data', (bytes) => 

    start = 0 
    end = bytes.length 

    while start < bytes.length 

     if remaining == 0 
     msavail = (Math.min 4, bytes.length - start) 
     bytes.copy msbuf, msbuf.length - msneeded, start, start + msavail 
     msneeded -= msavail 
     continue if msneeded > 0 
     msneeded = 4 
     remaining = msgsize = msbuf.readUInt32LE 0 
     start += 4 
     input = new Buffer msgsize 

     end = (Math.min start + remaining, bytes.length) 
     bytes.copy input, msgsize - remaining, start, end 
     remaining -= (end - start) 
     start = end 

     @emit 'data', input if 0 == remaining 
関連する問題