用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');//这里的呢?是指向服务器发送数据?
有点混淆,求指教。。。
(没用过 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的用法是数据从可读流 -> 流向 -> 可写流,理解起来也挺简单的。
谢谢大家~~~ 一下清晰了~~~