net模块是用于创建基于流的TCP活IPC的服务器和客户端,使用时使用require引入:var net = require("net");
我们先来说一下TCP与ICP的异同:
TCP/IP-传输控制协议/网际协议地址;可在同一台机器或不同机器或不同操作系统的进程间进行通信;
IPC (Inter Process Communication) 即进程间通信;不能跨物理机器,只能在同一台机器上的不同进程间进行通信;
在同一台机器上的两个进程间进行通信两者都可以使用,但是IPC效率会高于TCP/IP,原因:前者是直接把通讯包给另一个进程,后者是先把通讯包给本地环路接口,再从接口给另一个进程;
Net模块主要是两个类:Server、Socket
一、net.Server类
用于创建服务端
1) 创建Server:var server = net.Server();
2) 监听已有的连接:server.listen(端口号,ip);
3) 监听事件使用on:
事件有: listening:当服务绑定后触发
connection:当一个新的connection(连接)建立的时候触发,有参数socket
close: 当server关闭的时候触发,注意要等到所有的连接都结束之后才触发
error: 当错误出现的时候触发
4) 方法:
listen:监听已有的连接
close:关闭连接
address:返回绑定的地址,只有在listening事件被触发的时候菜可以调用该事件,不然返回的是一个空对象。
二、net.socket类
可以由用户创建并直接与服务器交互。
1) 创建一个连接:net.connect(端口号,ip);
2) 监听事件使用on:
事件有: connect:当一个socket连接成功建立的时候触发该事件
data:当接收到数据的时候触发该事件,数据编码由 socket.setEncoding() 设置
end: 关闭连接
timeout:连接超时触发
error:
3) 方法:
connect(端口,IP):创建连接
write(内容,编码格式-默认UTF8):在socket上发送数据
setTimeout():设置超时时长
4) 属性:
localPort:用数字表示本地端口。例如80或21
localAddress:返回操作系统报告的 socket 的地址、地址族和端口。返回的对象有三个属性,例如: { port: 12346, family: 'IPv4', address: '127.0.0.1' }
remotePort:用数字表示远程端口
remoteAddress:用字符串表示远程IP地址
三、一个简单的实例
服务端与客服端进行连接,发送消息
server.js
var net = require("net"); //引入net模块
var server = net.createServer(); //创建一个Server对象
server.listen('12306','127.0.0.1'); //监听已有的连接
//一些事件
server.on('listening',function () { //的那个服务绑定后触发
console.log('服务器已启动');
});
server.on('connection',function (socket) { //当一个新的连接建立时触发,可接收一个socket对象
console.log('有新的连接!');
socket.on('data',function (data) {
console.log(data.toString());
socket.write('你好啊,客户端');
socket.write('客户端,请关闭连接~');
})
server.close();
})
server.on('close',function () { //关闭连接时触发
console.log('连接已关闭');
})
client.js
var net = require("net"); //引入net模块
var socket = net.connect('12306','127.0.0.1'); //客户端创建一个连接
//失败事件
socket.on('error',function () {
console.log("连接失败");
})
socket.on('connect',function () { //连接成功时触发
console.log("连接服务器成功!");
socket.write("你好啊,服务器");
socket.on('data',function (data) { //接收到数据的时候触发
console.log(data.toString());
socket.end();
})
})
socket.on('end',function () {
console.log('我已主动关闭连接成功');
})
使用webStrom运行结果