有時候還會有老鐵在考慮在什么樣的環(huán)境下使用WebSocket,什么樣的環(huán)境下使用HTTP,今天我們來說下WebSocket和HTTP狠半。
? WebSocket和HTTP的區(qū)別
? http協(xié)議是用在應(yīng)用層的協(xié)議,他是基于tcp協(xié)議的孽水,http協(xié)議建立鏈接也必須要有三次握手才能發(fā)送信息。
? http鏈接分為短鏈接城看,長鏈接女气,短鏈接是每次請求都要三次握手才能發(fā)送自己的信息。即每一個request對應(yīng)一個response测柠。長鏈接是在一定的期限內(nèi)保持鏈接炼鞠。保持TCP連接不斷開缘滥。客戶端與服務(wù)器通信谒主,必須要有客戶端發(fā)起然后服務(wù)器返回結(jié)果朝扼。客戶端是主動的霎肯,服務(wù)器是被動的擎颖。?
? WebSocket他是為了解決客戶端發(fā)起多個http請求到服務(wù)器資源瀏覽器必須要經(jīng)過長時間的輪訓(xùn)問題而生的,他實現(xiàn)了多路復(fù)用观游,他是全雙工通信搂捧。在webSocket協(xié)議下客服端和瀏覽器可以同時發(fā)送信息。
? 建立了WenSocket之后服務(wù)器不必在瀏覽器發(fā)送request請求之后才能發(fā)送信息到瀏覽器懂缕。這時的服務(wù)器已有主動權(quán)想什么時候發(fā)就可以發(fā)送信息到服務(wù)器允跑。而且信息當(dāng)中不必在帶有head的部分信息了與http的長鏈接通信來說,這種方式搪柑,不僅能降低服務(wù)器的壓力聋丝。而且信息當(dāng)中也減少了部分多余的信息。
? HTTP的長連接與websocket的持久連接
? HTTP1.1的連接默認(rèn)使用長連接(persistent connection)工碾,
即在一定的期限內(nèi)保持鏈接弱睦,客戶端會需要在短時間內(nèi)向服務(wù)端請求大量的資源,保持TCP連接不斷開渊额】瞿荆客戶端與服務(wù)器通信,必須要有客戶端發(fā)起然后服務(wù)器返回結(jié)果端圈〗苟粒客戶端是主動的子库,服務(wù)器是被動的舱权。
? 在一個TCP連接上可以傳輸多個Request/Response消息對,所以本質(zhì)上還是Request/Response消息對仑嗅,仍然會造成資源的浪費(fèi)宴倍、實時性不強(qiáng)等問題。
如果不是持續(xù)連接仓技,即短連接鸵贬,那么每個資源都要建立一個新的連接,HTTP底層使用的是TCP脖捻,那么每次都要使用三次握手建立TCP連接阔逼,即每一個request對應(yīng)一個response,將造成極大的資源浪費(fèi)地沮。
? 長輪詢嗜浮,即客戶端發(fā)送一個超時時間很長的Request羡亩,服務(wù)器hold住這個連接,在有新數(shù)據(jù)到達(dá)時返回Response
websocket的持久連接
? 只需建立一次Request/Response消息對危融,之后都是TCP連接畏铆,避免了需要多次建立Request/Response消息對而產(chǎn)生的冗余頭部信息。
希望講了這么多能夠幫助大家更加深入的去了解WebSocket和HTTP之間的區(qū)別和聯(lián)系吉殃。如果覺得還是沒有理解可以試試用一下第三方WebSocket服務(wù)辞居,類似GoEasy這種免費(fèi)的,大家可以去了解一下蛋勺。網(wǎng)站好像是www.goeasy.io瓦灶,碼了這么多…今天就說到這里咯。