NodeJs簡明教程(9)

NodeJs簡明教程將從零開始學習NodeJs相關知識,助力JS開發者構建全棧開發技術棧!

關注獲取更多NodeJs精品文章
二維碼node

本文是NodeJs簡明教程的第九篇,將介紹NodeJs net 模塊(TCP服務端/客戶端)相關的基本操做。服務器

啥是TCP

傳輸控制協議(TCP,Transmission Control Protocol)是一種面向鏈接的、可靠的、基於字節流的傳輸層通訊協議,由IETF的RFC 793 定義。

NodeJs使用net模塊實現TCP服務端/客戶端相關功能。微信

Echo服務器開發

Echo服務器就是客戶端發送什麼,服務端就顯示什麼的一種服務端程序。主要爲了調試網絡和協議是否正常工做。

net.createServer用來建立一個服務端,該方法原型以下:網絡

net.createServer([options][, connectionlistener]): net.Server函數

  • options <Object>學習

    • allowHalfOpen <boolean> 代表是否容許半開的 TCP 鏈接。默認值: false
    • pauseOnConnect <boolean> 代表是否應在傳入鏈接上暫停套接字。默認值: false。
  • connectionListener <Function> 客戶端鏈接事件監聽器。回調參數爲Socket(能夠視爲一個客戶端鏈接)

返回值爲net.Servernet.Server主要方法以下:測試

server.listen([port[, host[, backlog]]][, callback])ui

  • port <number> 監聽端口
  • host <string> 監聽主機
  • backlog <number> 待鏈接隊列的最大長度
  • callback <Function> 監聽成功回調函數

server.jsspa

const net = require('net');

const server = net.createServer(function (client) { // 建立服務端
    console.log(client.address().address, '鏈接成功'); // 客戶端鏈接成功時打印客戶端地址

    client.on('error', function (e) {
        console.log(client.address().address, ' error >> ', e.message); // 鏈接錯誤時(如客戶端異常斷開)
    });

    client.on('data', function (data) { // 收到客戶端數據
        console.log(client.address().address, ' >> ', data.toString());
        client.write(data); // 往客戶端寫數據
    });

    client.on('end', function () { // 客戶端正常斷開
        console.log(client.address().address, '斷開鏈接');
    });
});

server.on('error', function (e) { // 服務器錯誤(如啓動失敗,端口占用)
    console.log('服務器啓動失敗', e);
});

server.listen(10000, function () {
    console.log('啓動成功,地址', server.address().address);
});
  1. 執行node server.js能夠看到輸出啓動成功,地址xxx
  2. 打開終端,執行telnet localhost 10000,能夠看到輸出以下(若是不同,請加羣討論):調試

    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
  3. 終端繼續輸入如下字符:

    helloworld
  4. 服務端會回覆

    hello world

該Echo服務器就開發已經測試經過了。雖然代碼量很少,可是演示了從零開始開發一個TCP服務器的流程,相比於C語言開發TCP服務器仍是方便不少的。

TCP客戶端

net.connect能夠鏈接目標TCP服務器,該方法原型以下:

net.connect(port[,host][,connectionListener])

  • port <number> 鏈接端口
  • host <string> 鏈接主機
  • connectionListener <Function> 鏈接成功的回調

仍是以剛纔監聽10000端口的服務端爲例來開發客戶端

client.js

const net = require('net');

const client = net.connect(10000, 'localhost', function () { // 鏈接服務器
    console.log('鏈接服務器成功');

    client.write('我是客戶端'); // 往服務端發送數據

    client.on('data', function (data) { // 接收到服務端數據
        console.log('服務端消息', data.toString());
        client.end(); // 斷開鏈接
    });

    client.on('end', function () { // 鏈接斷開事件
        console.log('服務端鏈接斷開');
    });
});

保證服務端開啓的狀況下,執行該js,輸出以下:

鏈接服務器成功
服務端消息 我是客戶端
服務端鏈接斷開

結語

NodeJs TCP服務端與客戶端開發到此結束,可是TCP協議的學習遠遠不止於此,包括自定義協議開發TCP粘包問題等等。這一塊有問題的能夠掃碼加羣交流:

微信羣

相關文章
相關標籤/搜索