2011-12-29 76 views
0

如何檢測node.js上的消息邊界? 客戶端發送消息的長度。長度+數據node.js上的消息邊界如何?

socket.on數據在線接收所有數據。

但我需要只接收2個字節先x字節數據。

謝謝

回答

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