1. 程式人生 > >淺談node之TCP

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