CNode

socket.pipe(socket); 是什么作用?

Xxian366发布于14 年前最后回复11 年前17 回复25006 浏览0 收藏

在node.js 见到了不少次的, .pipe的用法,在gzip压缩的时候,要用,

还有 stream.pipe(destination, [options]) .

socket的的时候, socket.pipe(socket); 这句话的作用是什么?

请教,这些.pipe 有什么作用?

查看回复

回复 (16)

L
leizongmin#1·14 年前

没用过这个,大概是这样吧:

平时需要这样写的代码:

s1.on('data', function (chunk) {
  s2.write(chunk);
});

s1.on('end', function (chunk) {
  s2.end();
});

直接用pipe()这样就可以实现

s1.pipe(s2);

不知道理解对不对,请楼下指正

C
chishaxie#3·14 年前
X
xian366#4·14 年前
X
xian366#6·14 年前
引用 leizongmin没用过这个,大概是这样吧: 平时需要这样写的代码: s1.on('data', function (chunk) { s2.write(chunk); }); s1.on('end', fun...

@leizongmin

那nodejs.org 首页提供的,

var net = require('net');

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

server.listen(1337, '127.0.0.1');

socket.pipe(socket); 这一句有什么作用呢,他就一个socket 。

请教 @chishaxie

L
leizongmin#7·14 年前
引用 leizongmin没用过这个,大概是这样吧: 平时需要这样写的代码: s1.on('data', function (chunk) { s2.write(chunk); }); s1.on('end', fun...

@xian366 就是客户端发神马数据过来,服务器就返回相同的数据嘛,这个自己试试就知道了。跟这个代码效果是一样的:

var net = require('net');

var server = net.createServer(function (socket) {
  socket.write('Echo server\r\n');
  socket.on('data', function (chunk) {
    socket.write(chunk);
  });
});

server.listen(1337, '127.0.0.1');
S
sipgear#9·13 年前

好好学习一下。

V
v8node#10·14 年前

pipe主要是使IO的流式(stream)操作更方便自然. 流式读写的最大好处一是省内存;二是精简代码. 推荐看看这篇文章http://docs.nodejitsu.com/articles/advanced/streams/what-are-streams

V
v8node#11·14 年前

最经典的案例是一边读文件,一边pipe给HTTP response. 我测试过使用pipe来做文件复制操作,测试表明其复制速度比系统cp命令快.文件越大,差距越明显. 需要注意的是由于操作系统缓存,第二次调用cp会比第一次快,需要排除这个因素.

C
chishaxie#13·14 年前
引用 chishaxie请见 http://nodejs.org/api/stream.html stream stream pipe destination options 这是流里面的函数……

@xian366 应该会少两次拷贝如果是on('data',function(d){ con.write(d); }); 这种有内核到用户态的拷贝 还有一次用户态到内核态的拷贝……

C
chishaxie#14·14 年前
引用 leizongmin没用过这个,大概是这样吧: 平时需要这样写的代码: s1.on('data', function (chunk) { s2.write(chunk); }); s1.on('end', fun...

@xian366 这是TCP回显服务器啊,将socket的输入流绑定到自身的输出流,也就是套接字获得什么数据就输出什么数据……于是叫TCP回显……

C
cmingxu#15·14 年前

@leizongmin 正解, 与操作系统的pipe概念没啥关系。

参与回复
登录后即可参与回复。登录