淺談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端口');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

利用Telnet工具作爲客戶端對創建的服務器進行會話交流:

$ telnet 127.0.0.1 8000
Trying 127.0.0.1..
Connected to localhost.
Escape character is '^]'.
  • 1
  • 2
  • 3
  • 4

也可以通過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('服務器關閉');
});
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

 http://www.yuemei.com/u/86338687/
http://www.yuemei.com/u/86338693/
http://www.yuemei.com/u/86338699/
http://www.yuemei.com/u/86338711/
http://www.yuemei.com/u/86338717/
http://www.yuemei.com/u/86338720/
http://www.yuemei.com/u/86338777/
http://www.yuemei.com/u/86338786/
http://www.yuemei.com/u/86338792/
http://www.yuemei.com/u/86338801/
http://www.yuemei.com/u/86338810/
http://www.yuemei.com/u/86329906/
http://www.yuemei.com/u/86329951/
http://www.yuemei.com/u/86330011/
http://weheartit.com/1010921566
http://weheartit.com/5QkVAOpNOjUHk
http://weheartit.com/g5uarct3elfC
http://weheartit.com/UUVryii4I2Q9
http://weheartit.com/uYjLBGRUfWqD
http://weheartit.com/aZw6YzhCkW
http://weheartit.com/2f3tBV1uFlqo
http://weheartit.com/wmqKbzPPqoEm
http://weheartit.com/pJZa1ZRHfYyX
http://weheartit.com/IjwtMODUcYle
http://weheartit.com/uDi1LZLe7wNR
http://club.1688.com/article/63422384.html
http://club.1688.com/article/63412786.html
http://club.1688.com/article/63405672.html
http://club.1688.com/article/63374462.html
http://club.1688.com/article/63358014.html
http://club.1688.com/article/63353075.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章