TCP是用來計算機之間進行通訊的,經過編寫客戶端和服務端聊天的代碼,對於服務器與客戶端的工做步驟有了深入的瞭解。在node中爲了實現TCP,提供了一個net
模塊,net
模塊給你提供了一個異步的網絡封裝,它包含建立服務器和客戶端(稱爲流)的功能。javascript
建立一個tcp服務,裏面放的是回調函數 監聽函數,當鏈接到來時纔會執行。html
其中傳進去的參數socket是套接字,幫咱們實現會話,每個客戶端對應的socket都是不同的。是一個duplex雙工流,能夠支持讀操做和寫操做。java
能夠設置服務監聽的端口,主機名, backlog服務端處理的最大請求,默認是511,能夠不寫。還有回調函數,當服務啓動成功會調用node
let net = require('net'); let server = net.createServer(function(socket){ ... }) server.listen(8080,'localhost',function(){ console.log(`server start 8080`) });
接下來能夠對服務端進行配置數組
server.maxConnections = 6;
但願每次請求到來時都有一個提示,當前最大鏈接多少個,如今一共鏈接多少個服務器
server.getConnections(function(err,count){ socket.write(`當前最大容納${server.maxConnections},如今${count}人`) });
socket.on('data',function(data){ console.log(data); });
socket.pause();
socket.resume();
監聽客戶輸入時,將客戶端輸入的內容寫入到文件內容。網絡
若是有兩個客戶端,就有兩個socket,其中一個關閉了,另外一個就寫不進去了app
let net = require('net'); let path = require('path'); let ws = require('fs').createWriteStream(path.join(__dirname,'./1.txt')); let server = net.createServer(function(socket){ socket.pipe(ws,{end:false}); // 因此能夠設置這個可寫流不關閉 setTimeout(function(){ ws.end(); // 關閉可寫流 socket.unpipe(ws); // 取消管道,就不能傳輸了 },5000) }); server.listen(8080);
close事件表示服務端不在接收新的請求了,當前的還能繼續使用,當客戶端所有關閉後會執行close事件。異步
// close事件只有調用close方法纔會觸發 server.on('close',function(){ console.log('服務端關閉'); })
unref() 不會觸發close事件,只有當全部客戶端都關閉了,服務端才關閉,若是有人進來(有新請求)仍然能夠。socket
let net = require('net'); let socket = net.createConnection({port:8080},function(){ socket.write('hello'); socket.on('data',function(data){ console.log(data); }); });
node中爲了實現http一樣也提供了一個模塊,叫http模塊,其中封裝了高效的http服務器和http客戶端 ,與net模塊用法類似。
當客戶端請求到來的時候,該事件被觸發。
咱們最經常使用的仍是request
事件,http也給這個事件提供了一個捷徑:http.createServer([requestListener])
。
傳入中的參數req是請求,是一個可讀流,res是響應 是一個可寫流。是經過socket解析出來請求和響應。
建立HTTP服務器有兩種方法
let http = require('http'); let server = http.createServer(); server.on('request',function(req,res){ req.on('end',function(){ res.write('hello'); res.end('world'); }); }); server.listen(8080);
let http = require('http'); let server = http.createServer(function(req,res){ res.end('ok'); }); server.listen(8080);
let http = require('http'); let server = http.createServer(function(req,res){ }); server.on('close',function(){ console.log('服務器關閉'); }); server.listen(8080,'127.0.0.1',function(){ console.log('服務器端開始監聽!') server.close(); // 關閉 });
http 模塊提供了兩個函數 http.request 和 http.get,功能是做爲客戶端向 HTTP服務器發起請求。
let http = require('http'); let options = { hostname:'localhost', port:4000, path: '/', method:'get', // 告訴服務端我當前要給你發什麼樣的數據 headers:{ 'Content-Type':'application/x-www-form-urlencoded', 'Content-Length':17 } } let req = http.request(options); // 當客戶端收到服務器響應的時候觸發 req.on('response',function(res){ res.on('data',function(chunk){ console.log(chunk); }); }); req.end('name=renee&&age=18');
var http = require('http'); http.createServer(function(req,res){}).listen(3000); http.get('http://www.baidu.com/index.html',function(res){ console.log('get response Code :' + res.statusCode); }).on('error',function(e){ console.log("Got error: " + e.message); })