- 新時(shí)期的Node.js入門
- 李鍇
- 658字
- 2019-12-12 17:05:42
2.5 TCP服務(wù)
如果開(kāi)發(fā)者大多數(shù)時(shí)間都在進(jìn)行Web站點(diǎn)的開(kāi)發(fā),那么TCP服務(wù)和HTTP服務(wù)相比出場(chǎng)率并不高,但HTTP僅僅是應(yīng)用層協(xié)議的一種,除了HTTP之外,應(yīng)用層還有一些比較常用的協(xié)議,例如FTP、SMTCP、Telnet等。
TCP服務(wù)不是我們介紹的重點(diǎn),這一節(jié)會(huì)簡(jiǎn)單介紹使用Node創(chuàng)建TCP服務(wù)的方法,以及一個(gè)應(yīng)用的例子。
2.5.1 TCP和Socket
大多數(shù)開(kāi)發(fā)者都知道網(wǎng)絡(luò)服務(wù)需要Socket編程,也都清楚TCP協(xié)議是用來(lái)傳輸數(shù)據(jù)的,TCP協(xié)議和Socket又有哪些區(qū)別呢?
Socket是對(duì)TCP協(xié)議的一種封裝方式,Socket本身并不是協(xié)議,而是一個(gè)編程接口,在這個(gè)接口上定義了一些基礎(chǔ)的方法,例如accept、listen、write等,如果一種編程語(yǔ)言實(shí)現(xiàn)了socket接口,那么它就可以通過(guò)socket接口預(yù)定義的方法來(lái)解析使用TCP協(xié)議傳輸?shù)臄?shù)據(jù)流。(socket并不是專門為TCP協(xié)議設(shè)計(jì)的,在設(shè)計(jì)之初就期望能兼容多種傳輸層協(xié)議。)
2.5.2 創(chuàng)建TCP服務(wù)器
在Node中有三種Socket,分別對(duì)應(yīng)實(shí)現(xiàn)TCP、UDP以及UNIX Socket,與這些相關(guān)的代碼都位于Net模塊中(UNIX Socket即UNIX Domain Socket,和面向網(wǎng)絡(luò)的TCP、UDP不同,主要用于本地系統(tǒng)的進(jìn)程間通信)。
Net模塊和HTTP模塊的結(jié)構(gòu)很相似,包含了Server類、Socket類以及一些預(yù)定義的方法,下面的代碼會(huì)創(chuàng)建一個(gè)TCP Server。
代碼2.16 創(chuàng)建一個(gè)TCP服務(wù)器

上面的代碼中,如果服務(wù)器收到了一個(gè)連接請(qǐng)求,就會(huì)返回一個(gè)Hello字符串,雖然該server監(jiān)聽(tīng)了8124端口,但如果在瀏覽器里打開(kāi)localhost:8124的方式來(lái)訪問(wèn),就會(huì)出現(xiàn)GET http://localhost:8124/ net::ERR_INVALID_HTTP_RESPONSE的錯(cuò)誤。原因也很簡(jiǎn)單,一個(gè)TCP服務(wù)器不會(huì)返回符合HTTP協(xié)議標(biāo)準(zhǔn)的響應(yīng),為了驗(yàn)證這個(gè)服務(wù)器,可以使用telnet命令,打開(kāi)控制臺(tái)輸入:

控制臺(tái)隨之輸出:

這表明TCP服務(wù)正常啟動(dòng)了。
如果不想使用命令行,也可以在代碼中使用connect或者createConnection方法來(lái)連接到一個(gè)TCP服務(wù)器,二者沒(méi)有任何區(qū)別。
代碼2.17 TCP客戶端

- Microsoft Dynamics 365 Extensions Cookbook
- Java編程指南:基礎(chǔ)知識(shí)、類庫(kù)應(yīng)用及案例設(shè)計(jì)
- Rust Cookbook
- Python編程與幾何圖形
- TypeScript項(xiàng)目開(kāi)發(fā)實(shí)戰(zhàn)
- Python機(jī)器學(xué)習(xí)基礎(chǔ)教程
- Mastering ROS for Robotics Programming
- INSTANT Adobe Edge Inspect Starter
- Python大學(xué)實(shí)用教程
- Visual Basic程序設(shè)計(jì)(第三版)
- C++程序設(shè)計(jì)教程
- Xamarin Cross-Platform Development Cookbook
- iOS Development with Xamarin Cookbook
- Offer來(lái)了:Java面試核心知識(shí)點(diǎn)精講(框架篇)
- Implementing Splunk(Second Edition)