node之TCP
- 首先node提供了net,daram,http,https这四个模块,分别用于处理TCP,UDP,HTTP,HTTPS,适合用于服务器端和客户端。
- TCP全名传输控制协议
TCP是面向连接的协议,其显著的特征是在传输之前需要三次握手形成会话,只有会话形成后,服务器端和客户端之间才能互相发送数据。
在创建会话的过程中,服务器端和客户端分别提供一个套接字,这两个套接字共同形成一个连接。
- 服务器端和客户端则通过套接字实现两者之间连接的操作。
构建TCP服务器
创建TCP服务器端
var net = require('net');
var server = net.createServer(function (socket){
//新的连接;
socket.on('data',function(data){
socket.write("你好");
});
socket.on('end',function(data){
console.log('连接断开');
});
socket.write("朋友,你好.\n");
});
server.listen(8000,function(){
console.log('绑定服务器8000端口');
});
利用Telnet工具作为客户端对创建的服务器进行会话交流:
$ telnet 127.0.0.1 8000
Trying 127.0.0.1..
Connected to localhost.
Escape character is '^]'.
也可以通过net模块自行构造客户端进行会话:
var net = require('net');
var client = net.connect({port:8000},function(){
console.log('服务器已连接');
});
client.on('data',function(data){
console.log(data.toString());
client.end();
});
client.on('end',function(){
console.log('服务器关闭');
});
TCP服务的事件
上述代码中分为服务器事件和连接事件
1.服务器事件
- 对于通过net.creatServer( )创建的服务器而言,他是一个EventEmitter实例,他的自定义时间有四种:
-
1:listening: 在调用sever.listen()绑定端口或者Domain Socket后触发,简洁写法为server.listen(por,listeningListener),通过listen()方法的第二个参数传入。
2.connection: 每个客户端套接字连接到服务器端时触发
3.close: 当服务器关闭时触发,在调用server.close()后,服务器将停止接受新的套接字连接,但保持当前存在的连接,等待所有连接都断开后,会触发该事件。
4.error: 当服务器发生异常时,会触发该事件。
2.连接事件
- 服务器可以同时与多个客户端保持连接,对于每个连接而言是典型的可写可读Stream对象。该对象可用于服务器和客户端之间的通信。他具有如下定义事件:
- 1.data: 当一端调用write()发送数据时,另一端会触发data事件,事件传递的数据时write()发送的数据。
-
2.end: 当连接中的任意一端发送了FIN数据时,将会触发该事件。
3.connect: 该事件用于客户端,当套接字与服务器连接成功时会被触发。
4.drain: 当任意一端调用write( )发送数据时,当前这端会触发该事件。
5.error: 当异常发生时,会触发该事件。
6.close: 当套接字完全关闭时,触发该事件。
7timeout: 当一定时间后连接不在活跃时,会被触发,通知用户当前该连接已经被闲置。
由于TCP套接字是可读可写的Stream对象,可以利用pipe()方法实现管道操作。
如下代码实现一个echo服务器:
var net = require('net');
var sever = net.creatSever(function(socket){
socket.write('Echo sever');
socket.pipe(socket);
});
sever.listen(8080,'127.0.0.1');