日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

websocket 连接本地端口_聊聊 WebSocket,还有 HTTP

發(fā)布時間:2024/9/27 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 websocket 连接本地端口_聊聊 WebSocket,还有 HTTP 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

還記得曾經(jīng)風(fēng)靡一時的 QQ 秀聊天室嗎?那時,還在上初、高中的我們,QQ 是最常用的聊天交友工具;而 QQ 秀聊天室的出現(xiàn)打破了只能按條件查找好友的局限性,大家可以隨意進入聊天室房間,進行在線聊天。懷念那個穿著最酷炫的 QQ 秀的我在聊天室閃亮登場,質(zhì)樸的問出一句:“有 GG/MM 嗎?”

WebSocket 的誕生

隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)上出現(xiàn)了各種聊天室軟件,各種新奇的玩法,卻再也找不到當(dāng)年那種純真的感覺了。當(dāng)然了,無論是曾經(jīng)的聊天室,還是如今的視頻彈幕,吸引人的地方就在于實時溝通交流。要實現(xiàn)類似實時交互的應(yīng)用場景,需要低延遲、高及時的技術(shù)。

曾經(jīng),很多網(wǎng)站為了實現(xiàn)上述場景,所用的技術(shù)都是輪詢。即每隔一段時間(如每 1 秒),由瀏覽器對服務(wù)器發(fā)出 HTTP 請求,詢問服務(wù)器有沒有新的信息,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端。這種傳統(tǒng)的輪詢模式存在很明顯的缺點,即瀏覽器需要不斷的向服務(wù)器發(fā)出請求,然而 HTTP 請求包含較長的請求頭,真正有效的數(shù)據(jù)可能只占一小部分,這樣顯然會浪費一部分帶寬資源。那有沒有更好的方法呢?

WebSocket 應(yīng)運而生。WebSocket 協(xié)議誕生于 2008 年,在 2011 年成為國際標(biāo)準(zhǔn),并且 WebSocket 同樣是 HTML 5 規(guī)范的組成部分之一。WebSocket 是一種全新的協(xié)議,它將 TCP 的 Socket(套接字)應(yīng)用在了 web page 上,從而使通信雙方建立起一個保持在活動狀態(tài)連接通道,并且屬于全雙工(雙方同時進行雙向通信)。WebSocket 協(xié)議更好的節(jié)省了服務(wù)器資源和帶寬,并且能夠更實時地進行通訊。

相比 HTTP 協(xié)議,WebSocket 究竟有哪些不同呢?

HTTP vs WebSocket

HTTP 協(xié)議是半雙工協(xié)議,也就是說在同一時間點只能處理一個方向的數(shù)據(jù)傳輸,屬于單向傳輸。在客戶端向服務(wù)器發(fā)起連接之前,服務(wù)器并不知道有這個連接。發(fā)起一個請求,得到一個響應(yīng),通信便結(jié)束了,客戶端和服務(wù)器也“忘記了彼此”。不過現(xiàn)在可以通過 Cookie 使客戶端保持某種狀態(tài),以便服務(wù)器可以識別客戶端。

而 WebSocket 協(xié)議是全雙工的,服務(wù)器可以隨時主動給客戶端下發(fā)數(shù)據(jù),可以雙向發(fā)送或接受信息,屬于雙向傳輸。WebSocket 可以通過客戶端和服務(wù)器的握手建立連接,并且連接一直保持“打開”狀態(tài),不僅僅是一個請求 + 一個響應(yīng)。首先,客戶端會先發(fā)起請求建立連接,若服務(wù)器接受了此請求,則將建立雙向通信。然后,服務(wù)器和客戶端就可以進行信息交互了,直到客戶端或服務(wù)器發(fā)送消息將其關(guān)閉為止。

當(dāng)然,WebSocket 和 HTTP 也是有聯(lián)系的。因為 WebSocket 需要先通過 HTTP 協(xié)議的 101 狀態(tài)碼建立連接。為了創(chuàng)建 WebSocket 連接,需要通過瀏覽器發(fā)起請求,等待服務(wù)器進行回應(yīng),這個過程通常稱為“握手”(Handshaking)。

一個典型的 WebSocket 握手請求如下:

客戶端請求:

GET / HTTP/1.1Upgrade: websocketConnection: Upgrade Host: localhost.comOrigin:http://localhost.comSec-WebSocket-Key: aN3cRrW/n8NuIgdhy2VJFX==Sec-WebSocket-Version: 13

服務(wù)器回應(yīng):

HTTP/1.1 101 Switching ProtocolsUpgrade: websocket Connection: UpgradeSec-WebSocket-Accept: pFDoeB2FAdLlXgESz0UT2v7hp0s=Sec-WebSocket-Location: ws://localhost.com/

字段說明:

  • Connection 字段必須為 Upgrade,表示客戶端希望連接升級。
  • Upgrade 字段必須為 WebSocket,表示希望升級到 WebSocket 協(xié)議。
  • Sec-WebSocket-Key 的值是隨機字符串,服務(wù)器端會用這些數(shù)據(jù)來構(gòu)造出一個SHA-1的信息摘要。把“Sec-WebSocket-Key”加上一個特殊字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,然后計算 SHA-1 ,再進行 Base64 編碼,將結(jié)果做為“Sec-WebSocket-Accept”頭的值,并返回給客戶端。這樣可以盡量避免普通 HTTP 請求被誤認(rèn)為 WebSocket 協(xié)議。
  • Sec-WebSocket-Version 字段表示支持的 WebSocket 版本。RFC6455 要求使用的版本是13,之前草案的版本均應(yīng)當(dāng)棄用。
  • 其他一些定義在 HTTP 協(xié)議中的字段,如 Cookie 等,也可以在 WebSocket 中使用。

WebSocket 使用 ws 或 wss 的統(tǒng)一標(biāo)識符,類似于 HTTP/HTTPS。其中 wss 表示使用了 TLS 的 WebSocket。例如:

ws://localhost.com/apiwss://securelocalhost.com/api

WebSocket 與 HTTP/HTTPS 使用相同的 TCP 端口。默認(rèn)情況下,WebSocket 協(xié)議使用 80 端口;運行在 TLS 之上時,默認(rèn)使用 443 端口。

WebSocket 的優(yōu)勢

作為“后起之秀”,到如今的廣泛應(yīng)用,毋庸置疑 WebSocket 擁有很多優(yōu)點:

  • 較少的資源浪費

在連接創(chuàng)建后,服務(wù)器和客戶端之間交互時,傳輸?shù)臄?shù)據(jù)包頭部相對較小。相對于 HTTP 請求每次都要攜帶完整的頭部,資源浪費顯著減少了。

  • 更強的實時性

由于 WebSocket 協(xié)議是全雙工的,所以服務(wù)器可以隨時主動給客戶端傳輸數(shù)據(jù)。相對于 HTTP 請求需要等待客戶端發(fā)起請求服務(wù)端才能響應(yīng),延遲明顯更少。

  • 保持長連接

與 HTTP 不同的是,WebSocket 需要先創(chuàng)建連接,這就使得其成為了一種有狀態(tài)的協(xié)議。而 HTTP 請求可能需要在每個請求都攜帶狀態(tài)信息(如身份認(rèn)證等)。

  • 更好的二進制支持

WebSocket 定義了二進制幀,相對 HTTP,可以更輕松地處理二進制內(nèi)容。

  • 更好的壓縮效果

相對于 HTTP 壓縮,WebSocket 在適當(dāng)?shù)臄U展支持下,可以沿用之前內(nèi)容的上下文,在傳遞類似的數(shù)據(jù)時,顯著地提高壓縮率。

不同的業(yè)務(wù)場景如何選擇

相比較 WebSocket 和 HTTP,可以說 HTTP 請求比 WebSocket 更簡單,但是也有局限性。在不同的使用場景可以選擇更合適的協(xié)議。目前互聯(lián)網(wǎng)上大多數(shù)網(wǎng)站都是直接加載網(wǎng)頁,除了單擊加載新頁面之外,交互工作都很少。在這種場景下沒有必要保持長連接,使用 WebSocket 會顯得過于“笨重”。一般的網(wǎng)頁都會使用靜態(tài)資源,例如 Image 圖片,Javascript 或 CSS 文件等。為了加載更快,這些靜態(tài)資源都需要進行緩存,而且它們可能并不來自同一個域名,這時當(dāng)然使用 HTTP 更為輕便快捷。HTTP 協(xié)議的每個請求都需要發(fā)送一次請求頭,而 WebSocket 僅在初始請求建立連接中攜帶頭信息(當(dāng)然了,傳遞消息中也會有一些開銷,但都是比較小的)。因此,如果想持續(xù)發(fā)送多個消息,使用 Websocket 會更節(jié)省資源。如果要開發(fā)一個客戶端和服務(wù)器持續(xù)交互的程序,那么 WebSockets 將是最佳選擇。例如:

  • 社交、聊天

社交聊天工具,網(wǎng)站在線咨詢窗口等,這一類聊天應(yīng)用的特點是低延遲,高及時。其采用 WebSocket 協(xié)議,實現(xiàn)了實時溝通交流,以高效的方式滿足溝通的需求。

  • 彈幕

看視頻,彈幕少不了,精彩的點評、搞笑的段子,網(wǎng)友之間的實時互動,有時對于一個視頻來說,彈幕才是精華。而發(fā)彈幕需要實時顯示,通過 WebSocket 協(xié)議可將本地客戶端發(fā)送的彈幕信息通過服務(wù)端全部推送至其他用戶的客戶端并進行實時展示。

  • 在線教育

在線教育近幾年發(fā)展迅速,不用出門即可和老師、同學(xué)實時溝通、交流。老師布置作業(yè)、學(xué)生互動、咨詢老師問題等等都可實時在線進行,此類實時交互都可由 WebSocket 協(xié)議支撐完成。

  • 位置信息更新的應(yīng)用

當(dāng)前移動設(shè)備中實時的位置定位、實時的網(wǎng)絡(luò)數(shù)據(jù)更新,使用 HTTP 協(xié)議顯得有些笨拙,借用 WebSocket 可以讓數(shù)據(jù)實時更新更快。又拍云 WebSocket 服務(wù)產(chǎn)品,突破傳統(tǒng) CDN 廠商只能加速 HTTP/HTTPS 協(xié)議的局限,將 WebSocket 協(xié)議與 CDN 相融合,并結(jié)合自身多年 CDN 行業(yè)技術(shù)經(jīng)驗,采用多種優(yōu)化技術(shù),為使用 WS/WSS 協(xié)議進行通信的客戶提供了優(yōu)質(zhì)的加速服務(wù),能有效降低延遲,提升效率。快來搶先體驗!

推薦閱讀:

說說 WebSocket,3 分鐘讓你全面認(rèn)識它?www.upyun.com喜大普奔,又拍云全新產(chǎn)品 WebSocket 上線啦?www.upyun.com

總結(jié)

以上是生活随笔為你收集整理的websocket 连接本地端口_聊聊 WebSocket,还有 HTTP的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。