2011-12-29 29 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