浅谈node之TCP

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');

猜你喜欢

转载自blog.csdn.net/ma_shen/article/details/80835431