7.一、使用net模塊實現基於TCP的數據通訊node
7.1.一、建立TCP服務器緩存
在node.js中能夠很方便的建立一個TCP服務器,只需調用net模塊中的CreateServer方法便可。服務器
var server=net.createSever([options],[connctionListener])socket
options參數值爲一個對象,能夠在該對象中受用一個布爾類型的allowHalfOpen屬性,當該屬性被指定爲false時,當TCP服務器接收到客戶端發送的一個FIN包時將會回發一個FIN包,當該屬性被設定爲true時,當TCP服務器接收到客戶端發送的一個FIN包時不回發FIN包,這使的TCP 服務器能夠繼續向客戶端發送數據,但不會繼續接收客戶端發送的數據。開發者必須調用end方法來關閉該socket鏈接。該屬性默認值爲false。函數
connectionListener參數用於指定當客戶端與服務器端創建鏈接時所要調用的回調函數。回調函數以下所示:ui
function(socket){//回調函數代碼}server
在該回調函數中使用一個參數,參數值爲該TCP服務器監聽的socket端口對象。對象
createServer方法返回被建立的TCP服務器。事件
當客戶端與服務器端創建鏈接時,觸發connection事件,咱們也能夠不在createServer方法中使用connectionListener參數,而是經過connection事件進行監聽,而且該事件的回調函數的方法來指定客戶端與服務器端鏈接時須要執行的處理,以下所示:ip
server.on('connection',function(socket){//回調函數代碼})
7.1.二、socket端口對象
在node.js中,使用net,.socket表明一個socket端口對象。在使用createSever方法的connetionListener參數鎖指定的回調函數的參數值即一個被自動建立的net.Socket對象,在對TCP服務器所指定的connection事件回調函數的參數值一樣爲一個被自動建立的net.socket對象。
與TCP服務器對象的address方法相似,能夠利用socket端口對象的address方法獲取該socket端口的相關地址信息。
var address=socket.address();
address.prot:socket端口對象的端口號
address.address:socket端口對象所屬地址
address.family:標識該socket端口對象所屬地址是IPv4地址仍是IPv6地址的字符串,例如「IPv4」
使用socket端口對象的address方法查看端口地址信息,代碼以下:
var net=require('net');
var server=net.createServer();
server.on('connection',function(socket){
address=socket.address();
console.log('socket端口對象的地址信息爲:%j',address);
})
server.listen(8431,'localhost');
socket端口對象可被用來讀取客戶端發送的流數據。每次接收到客戶端發送的流數據時觸發data事件
可經過對該事件進行監聽而且指定回調函數的方法來指定當服務器端監聽的socket端口對象接收到客戶端發送的數據時所需執行的出來。
socket.on('data',function(data){//回調函數});
在該回調函數中,使用一個參數,參數值爲一個Buffer對象或一個字符串對象。
另外,socket端口對象具備一個bytesRead屬性,該屬性值爲socket端口對象接收到的客戶端發送數據的字節數。
當客戶端連接被關閉時觸發socket端口對象的end事件。
能夠利用socket對象的pipe方法將客戶端發送的流數據寫到文件等其餘目標對象中。
socket.pipe(destination,[options]);
在pipe方法中,使用兩個參數,其中destination參數爲必須輸入參數,options爲可選參數。destination必須爲一個可用於寫入流數據的對象,options參數爲一個對象,能夠在該對象中使用一個布爾類型的end屬性,若是該屬性爲true,則當數據被所有讀取完畢時當即結束寫操做,若是該屬性爲false,則不行結束寫操做,目標對象中能夠被繼續寫入新的數據,該屬性值默認爲true.
可使用socket端口對象的unpipe方法取消對目標對象的寫入操做。
在node.js中,可使用socket對象的pause方法暫停data事件的觸發,這是服務器把每一個客戶端發哦那個的數據暫時存在一個單獨的緩存區,socket端口對象的resume方法恢復data事件的觸發,這時將讀取被 緩存的該客戶端數據。
socket.pause();
socket.resume();
當存在大量的往TCP服務器端發送數據的客戶端時,這一對方法可用來控制對每一個客戶端發送數據的讀取速度。
當TCP服務器與客戶端創建鏈接或通訊過程當中發生錯誤時,觸發socket對象的error事件 。
在捕捉到錯誤以後,應該使用socket對象的destroy方法銷燬該socketd端口對象,以確保該socket端口對象不會在被利用。
socket.destroy();
7.1.三、建立TCP客戶端
在node.js中,建立TCP客戶端是一件很是簡單的事,只要建立一個用於鏈接TCP服務器的socket端口對象便可。
var net=new net.Socket([options]);
建立了socket端口對象以後,可使用兩種connect方法連接TCP服務器。
方法一 socket.connect(port,[host],[connectListener]);
方法二 socket.connect(path,[connectListener])
7.1.四、net模塊中的類方法
7.二、使用dgram模塊實現基於UDP的數據通訊。