在Node.js net中使用pipe()

Nic*_*ons 66 javascript tcp node.js

我无法绕过net模块的pipe几个Node.js示例中显示的函数.

var net = require('net');

var server = net.createServer(function (socket) {
  socket.write('Echo server\r\n');
  socket.pipe(socket);
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释这是如何工作的以及为什么需要它?

hex*_*ide 94

pipe()函数在可读流可用时从其读取数据并将其写入目标可写流.

文档中的示例是一个echo服务器,它是一个发送它接收内容的服务器.该socket对象实现了可读和可写的流接口,因此它将接收到的任何数据写回套接字.

这相当于pipe()使用事件侦听器的方法:

var net = require('net');
net.createServer(function (socket) {
  socket.write('Echo server\r\n');
  socket.on('data', function(chunk) {
    socket.write(chunk);
  });
  socket.on('end', socket.end);
});
Run Code Online (Sandbox Code Playgroud)

  • 它位于[这里](http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options).然后,如果你看一下[这里](http://nodejs.org/api/net.html#net_class_net_socket),就说`net.Socket`实例实现了一个双工流. (8认同)
  • 你能链接到pipe(net.Soctket)的文档吗?或者没有? (2认同)

use*_*300 5

pipe()从可读流读取并写入可写流,很像 Unix 管道。它一路上做所有“合理”的事情,包括错误、文件结尾、如果一侧落后等。你的特定示例有点令人困惑,因为socket它既可读又可写。

一个更容易理解的例子是在这个 SO 问题中,你从一个 http 请求中读取并写入一个 http 响应。