Node.js实现TCP和HTTP并作简单的比较
TCP和Node
傳輸控制協議是一個面向連接的協議,換句話說,它是一個傳輸層的協議,它主要的職務呢,就是確保信息傳輸的正確性。
我們使用的很多如HTTP協議都是基于TCP的,為什么呢?因為我們不希望傳輸的html文件缺斤少兩吧,少了一個字符(字節)都可能會造成全體的崩盤吧?
連接數據庫的時候我們用的其實也是TCP套接字。
本來吧,IP數據包的傳輸是無序的?這就是TCP存在的理由,我們總是需要一些規則來限定我們的生活。就像法律一樣,沒有法律,社會能安定嗎?所以,我們需要TCP。同時,為了能夠更加自由,TCP是字符編碼不敏感的,它不計較傳輸文件流的字符,它只在乎傳輸過程安全穩定。法律不在乎所謂人情,它只要理性,它也只負責處理結果。
- 話不多說,上代碼,首先我們先確保我們的telnet服務是打開的(win7默認是關閉的)
這是我們的服務器,用的是http的模塊,實際上net才是tcp的模塊
之后新建一個cmd窗口,telnet 127.0.0.1 3000如果沒有報錯就是連接成功了~
- 接下來,我們進行代碼2的編寫
之后我們再次開一個新窗口telnet localhost 300 , 我們發現,屏幕輸出了新的連接這樣一排字。
這一次我們使用的是net模塊,因此我們也可以很好的理解,http是封裝在tcp之上的協議。
其實express就是又在http上封裝了一層(參見req,res),而koa則相當于在http上封裝了兩層(參見ctx.req,ctx.res)
修改上述代碼,用cmd寫telnet再試試?事情變得非常有趣了哈哈哈!
TCP和HTTP服務器有著兩個本質的區別,其一,那就是回調類型中對象的類型。net服務器中它是一個連接對象,而HTTP服務器中,則是請求和相應對象。
其二,就是,瀏覽器在訪問站點的時候不會只用一個連接,很多主流瀏覽器為了速度一次會同時打開七八個連接,并發送請求。
HTTP是比TCP更高層的API。
默認情況下,Node會告訴瀏覽器保持連接,因為多次斷開TCP在打開TCP這樣更影響效率。
下面我用HTTP來實現一個簡單的請求的過程(或者說客戶端和服務器會話?)
server.js
let http=require('http'); http.createServer((req,res)=>{res.writeHead(200);res.end('Hello,world'); }).listen(3000);client.js
let http=require('http'); let _http_req={host:'127.0.0.1',port:3000,url:'/',method:'GET' }; http.request(_http_req,(res)=>{let content='';res.setEncoding('utf-8');res.on('data',(chunk)=>{content+=chunk;});res.on('end',()=>{console.log(content);}); }).end();使用 http.request() 必須總是調用 req.end()來表明請求的結束,即使沒有數據被寫入請求主體。
轉載于:https://www.cnblogs.com/can-i-do/p/7144480.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Node.js实现TCP和HTTP并作简单的比较的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET里创建Microsoft
- 下一篇: 专题——背包问题