无法使用net.createConnection()获取单个数据回调;

时间:2017-05-02 14:28:56

标签: javascript node.js callback unix-socket

我是Node.js概念的新手。我正在研究使用Unix套接字作为C和Node.js之间的通信方式。

在C: 我正在发送1000个100字节长消息的迭代。

在Node.js中: 我收到4个大小的数据回调:

  • 第一回调:10000
  • 第二回调:32200
  • 第三回调:32200
  • 第四次回调:25600

我知道我能够收到完整的数据。但是,如何在1000个回调中获取每个大小为100字节的数据(与发送方式相同)。

代码参考

C中的服务器(部分):

char buf[100];
int loop_count = 0;
memset(buf,0xA5,sizeof(buf));
while(loop_count < 1000) {
    rc = sizeof(buf);
    if (write(cl, buf, rc) != rc) {
        if (rc > 0) fprintf(stderr,"partial write");
        else {
            perror("write error");
            exit(-1);
        }
    }
    ++loop_count;
}

Node.js中的客户端:

var net = require('net');
var client = net.createConnection("temp");
#temp is the socket file name

client.on("connect", function() {
    console.log("Connection established");
});

client.on("data", function(data) {
   console.log("Found data "+data);
});    

1 个答案:

答案 0 :(得分:0)

套接字缓冲区数据,因此当您将100字节的块写入套接字时,读取器不一定会以整齐的100字节块读取数据。

您可以使用像block-stream这样的模块将数据拆分为100字节的块:

const BlockStream = require('block-stream');
const net         = require('net');
const client      = net.createConnection('temp');
const bs          = new BlockStream(100);

let count = 0;

client.pipe(block).on('data', function(data) {
  count++;
  console.log('Found data: ', data);
}).on('end', function() {
   console.log('Read %s blocks', count);
});