var net = require('net');
net 是一个系统模块,也就是安装 Node 之后自带的模块,没必要对他感到畏惧,其实他的内部也是十分简单的:
var Net = function(){};
Net.methodA = function (){};
Net.methodB = function (){};
module.exports = Net;
我们可以简单理解 net 模块的内部实现,他就是一个 Net 类,上面绑定了很多的 methods,require 之后,相当于返回一个 Net 类,此时我们就可以尽情使用 Net 中定义的所有方法和属性了。
Node 中开启一个 TCP 服务器:
// server.js
var net = require('net');
var server = net.createServer(function(socket) { //'connection' listener
console.log('server connected');
socket.on('end', function() {
console.log('server disconnected');
});
socket.on('data', function(){
socket.end('hello\r\n');
});
});
server.listen(8124, function() { //'listening' listener
console.log('server bound');
});
上面这段代码应该很好理解,首先 net.createServer 创建一个 TCP 服务,这个服务绑定(server.listen)在 8124 这个端口上,创建 Server 后我们看到有一个回调函数,这个回调函数的实现方式是怎么样的呢?
net.createServer = function(callback){
// 每次客户端连接都会新建一个 socket
var socket = new Socket();
callback && callback(socket);
};
在调用上面函数的时候传入一个参数,这个参数也是函数,并且接受了 socket ,这个由其他方法构造的一个管道(pipe),他的作用就是用来数据交互的。第一节中我们说到了,pipe 是需要 Client 跟 Server 打招呼才能建立的,如果此刻没有客户端访问 Server,这个 socket 就不会存在了。