不太理解net的socket,分不清啥时候当成req啥时候当成res
发布于 1个月前 作者 hwoarangzk 353 次浏览 来自 问答

用net建立服务器:

net.createServer(function(socket) {
    socket.on('data', function(chunk) {
        //这里监听data事件,是指往res里写数据,然后发送给客户端么?
    });
    socket.pipe(socket);//第一个socket是req,第二个socket是res?
});

建立客户端:

var socket = net.connect();
socket.on('data', xxx);//这里的socket又是指什么意思?req?res?
socket.write('xxx');//这里的呢?是指向服务器发送数据?

有点混淆,求指教。。。

5 回复

(没用过 net 模块,有其他语言的经验,然后顺便看了眼文档)

不像 http 模块分成 req 和 res, net.Socket 即可读数据(data 事件)又可写数据(write 方法)。 socket 就好像一个双向管道,客户端写数据会被服务器读到,服务器写数据会被客户端读到。

你的代码看上去是实现了一个「回显」服务器,即把客户发来的数据原封不动地再发回客户端,所以有 socket.pipe(socket); 这句,即把 socket 收到的数据写回 socket.

在服务器的那段代码里 我分不清socket.on(‘data’)的时候 这里应该是res在接收数据,而不是req吧? 那么在客户端那里 就完全分不清是req还是res了。。。

socket 即是req又是res socket.pipe(socket) 相当于 socket.on('data', socket.write.bind(socket)) 相当于 socket.on('data', function (data) { socket.write(data) }) :-)

socket 是双工流,即可读也可写; 客户端emit一个事件,并发送一些数据,这个时候是写入到客户端的req中,on一个事件并获取数据的时候是从服务器返回的res中读取数据。 服务端也是一样的,on一个客户端emit的事件的时候接收客户端发送的数据,服务端再emit事件的时候是将数据写入到返回给客户端的res中。 然后要注意pipe的用法是数据从可读流 -> 流向 -> 可写流,理解起来也挺简单的。

谢谢大家~~~ 一下清晰了~~~

回到顶部