net模塊是node對TCP或者IPC開發的封裝,包括了客戶端和服務器端相關API。對於閱讀本文,請您有必定的網絡編程的基礎。
您須要已經瞭解了:javascript
本文,僅對部分API和TCP開發作一些簡單介紹。html
net.Server
類用於建立TCP的server,並且繼承了EventEmitter
。經過net.createServer([options][, connectionListener])
方法建立此類型實例。java
const net = require('net'); // 建立服務器端的 const server = net.createServer(); // 監聽異常錯誤事件 server.on('error', err => { // throw err; console.log(err); }); // 監聽客戶端的鏈接事件,客戶端鏈接上後,會自動執行回調函數,回調函數的參數就是指向客戶端的socket server.on('connection', clientSocket => { console.log('客戶端:%s', clientSocket.remoteAddress); // 監聽此客戶端的end事件。 clientSocket.on('end', () => { console.log('client disconnected'); }); // 監聽此客戶端發送數據的事件。 clientSocket.on('data', data => { console.log('收到數據:%s', data); }); // 向客戶端發送數據 clientSocket.write('Hi, aicoder.com '); // 2s後讓客戶端退出 setTimeout(() => { // 通知客戶端退出,併發送數據。 clientSocket.end('bye!'); }, 2000); }); // 服務器開始監聽60003端口(端口:0-65535之間的一個值) server.listen(60003, () => { console.log('opened server on', server.address()); }); // 如下爲關閉監聽的實例 // setTimeout(() => { // console.log('服務器端退出!!!'); // server.close(); // }, 5000);
net.Server
是對服務器端的Socket的封裝,能夠監聽close
事件、error
事件、connection
事件、listening
事件。還能夠經過close()
方法關閉服務的監聽。其餘用法參考官網文檔。node
net.Socket
類是對客戶端Socket的封裝,能夠監聽 close
事件、 connect
事件 、data
事件、drain
事件、end
事件、error
事件、lookup
事件、timeout
事件。可用的方法包括:write()
發送數據、edn()
結束鏈接等。其中能夠同data
事件來處理服務器端的數據。git
net.createConnection()
方法能夠實現鏈接服務器端,並生成一個net.Socket
類實例,跟服務器端進行交互就是靠此實例。github
const net = require('net'); // 建立鏈接到服務器的客戶端 let client = net.createConnection('60003', '127.0.0.1', () => { client.write('Hi, client, for aicoder.com'); console.log('鏈接上服務器端!'); }); client.on('error', err => { console.log(err); }); client.on('end', () => { console.log('結束鏈接!'); }); client.on('close', () => { console.log('退出'); }); client.on('data', data => { console.log('收到數據: %s', data); });
const net = require('net'); const path = require('path'); const fs = require('fs'); // 建立服務器端的 const server = net.createServer(); // 監聽異常錯誤事件 server.on('error', err => { console.log(err); }); // 監聽客戶端的鏈接事件,客戶端鏈接上後,會自動執行回調函數,回調函數的參數就是指向客戶端的socket server.on('connection', clientSocket => { console.log('客戶端:%s', clientSocket.remoteAddress); // 監聽此客戶端的end事件。 clientSocket.on('end', () => { console.log('client disconnected'); }); // 監聽此客戶端發送數據的事件。 clientSocket.on('data', data => { console.log('收到數據:%s', data); let fileName = path.join(__dirname, 'b.html'); let ws = fs.createWriteStream(fileName); ws.write(data, 'utf8'); }); // 向客戶端發送數據 clientSocket.write('Hi, aicoder.com '); }); // 服務器開始監聽60003端口(端口:0-65535之間的一個值) server.listen(60003, () => { console.log('opened server on', server.address()); }); // 如下是客戶端代碼 const client = net.createConnection(60003, '127.0.0.1', () => { console.log('鏈接上服務器端!'); let fileName = path.join(__dirname, 'a.html'); let rs = fs.createReadStream(fileName, { encoding: 'utf8' }); // socket自己是可讀可寫流,因此能夠直接用管道。 rs.pipe(client); });
若是您已經瞭解了HTTP協議的話,並且已經掌握如何作TCP的發送數據和接受處理數據,再有您稍微掌握一點字符串處理的技巧,那麼您就很容易作一個簡單的靜態web服務器出啦。固然這裏是說用底層的API,不是用http模塊。web
限於篇幅,在此再也不贅述,請直接看個人github源碼,僅僅是demo,不要用於生產環境中。編程
node中對socket的封裝,仍是比較像node的開發風格的,可能跟其餘平臺的socket編程的風格不一致,可是原理和開發方式都是同樣的。這裏僅僅是簡單介紹一下Node下面網絡編程的基本方法,細節請參考官網文檔。api
老馬免費視頻教程服務器