国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

WebSocket魔法師:打造實(shí)時應(yīng)用的無限可能

這篇具有很好參考價值的文章主要介紹了WebSocket魔法師:打造實(shí)時應(yīng)用的無限可能。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

1、背景

在開發(fā)一些前端頁面的時候,總是能接收到這樣的需求:如何保持頁面并實(shí)現(xiàn)自動更新數(shù)據(jù)呢?以往的常規(guī)做法,是前端使用定時輪詢后端接口,獲取響應(yīng)后重新渲染前端頁面,這種做法雖然能達(dá)到類似的效果,但是依然有很多缺點(diǎn),缺點(diǎn)就不在這里說了,感興趣的小伙伴可以自行查閱一下?,F(xiàn)在讓我們回憶一下,我們有沒有想過,是否有一種技術(shù),服務(wù)器可以主動將數(shù)據(jù)推送給客戶端進(jìn)行渲染,而不再是客戶端向服務(wù)器發(fā)出請求等待返回結(jié)果呢?接下來,讓我們一起了解weboskcet。

2、什么是websocket

websocket是HTML5規(guī)范的一個部分,它借鑒了socket的思想,實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工通信,達(dá)到了即時通信的效果。websocket協(xié)議基于TCP協(xié)議實(shí)現(xiàn),包含初始的握手過程,以及后續(xù)的多次數(shù)據(jù)幀雙向傳輸過程,避免服務(wù)器頻繁打開多個HTTP連接,從而能更好的節(jié)省服務(wù)器資源和帶寬,提高工作效率與資源利用率

3、工作原理

websocket的通信規(guī)范,首先瀏覽器通過HTTP協(xié)議發(fā)出websocket的連線請求,服務(wù)器進(jìn)行響應(yīng),這個過程稱為握手,握手完成后,客戶端和服務(wù)器之間建立一個類似TCP的連接,使用websocket協(xié)議,從而實(shí)現(xiàn)它們之間的通信。

4、與HTTP的關(guān)系

相同點(diǎn):

1、都是基于TCP協(xié)議,且都是可靠性傳輸協(xié)議;

2、都是應(yīng)用層協(xié)議;

3、websocket支持兩種資源標(biāo)志符ws(默認(rèn)80端口)與wss(默認(rèn)443端口),類似HTTP和HTTPS;

不同點(diǎn):

1、websocket是雙向通信協(xié)議,HTTP是單向的;

2、websocket是需要瀏覽器和服務(wù)器握手進(jìn)行建立連接的,HTTP是瀏覽器發(fā)起向服務(wù)器的連接,服務(wù)器預(yù)先并不知道這個連接。

聯(lián)系點(diǎn):

websocket在建立握手時,數(shù)據(jù)是通過HTTP傳輸?shù)?,建立之后的?shù)據(jù)傳輸將不再需要HTTP協(xié)議,而是websocket協(xié)議;

5、websocket創(chuàng)建與常用的屬性方法

5.1 websocket屬性

屬性 描述
readyState 只讀屬性 readyState 表示連接狀態(tài),可以是以下值:0 :表示連接尚未建立。1 :表示連接已建立,可以進(jìn)行通信。2 :表示連接正在進(jìn)行關(guān)閉。3 :表示連接已經(jīng)關(guān)閉或者連接不能打開。
bufferedAmount 只讀屬性 bufferedAmount 已被 send() 放入正在隊(duì)列中等待傳輸,但是還沒有發(fā)出的 UTF-8 文本字節(jié)數(shù)。
CONNECTING 值為0,表示正在連接
OPEN 值為1,表示連接已建立,可以進(jìn)行通信
CLOSING 值為2,表示連接正在關(guān)閉
CLOSED 值為3,表示連接已經(jīng)關(guān)閉或者連接不能打開
// 創(chuàng)建websocket
var ws = new WebSocket("ws://www.example.com");
  if(ws.readyState == ws.CONNECTING){
    console.log('連接正在打開');
  }

  ws.onopen = function () {
    ws.send(consumerId);
    if(ws.readyState == ws.CONNECTING){
      console.log('連接正在打開1');
    }
    if(ws.readyState == ws.OPEN){
      console.log('連接已打開');
    }
    console.log('已經(jīng)建立連接');
    // 關(guān)閉連接
    // ws.close()
  };


  // 連接關(guān)閉時觸發(fā)
  ws.onclose = function () {
    if(ws.readyState == ws.CLOSED){
      console.log('連接已關(guān)閉')
    }
  };

  // 連接錯誤
  ws.onerror = function () {
    console.log('連接錯誤');
  };



5.2 weboscket事件

事件 處理程序 描述
open onopen 連接建立時觸發(fā)
message onmessage 接收消息時觸發(fā)
error onerror 發(fā)生錯誤時觸發(fā)
close onclose 關(guān)閉連接時觸發(fā)

5.3 客戶端的簡單示例

// 創(chuàng)建websocket
var ws = new WebSocket("ws://www.example.com");

// 連接成功時觸發(fā)
ws.onopen = function(e) {
    console.log("Connectiong open ...");
    // 發(fā)送消息
    ws.send("Hello WebSocket");
};

// 接收消息時觸發(fā)
ws.onmessage = function(e) {
    console.log("Received Message: " + e.data);
    ws.close();
};

// 關(guān)閉連接時觸發(fā)
ws.onclose = function(e) {
    console.log("Connection closed");
};

// 出現(xiàn)錯誤時觸發(fā)
ws.onerror = function(e) {
    console.log("error");
};



5.4 服務(wù)端的簡單示例

# 創(chuàng)建websocket服務(wù)端
from tornado.websocket import WebSocketHandler

class wsHandler(WebSocketHandler):
    # 保存連接的用戶,用于后續(xù)推送消息
    connect_users = set()
    
    # 已與客戶端建立連接
    def open(self):
        print("開啟WebSocket opened")
        self.connect_users.add(self)

    # 關(guān)閉客戶端連接
    def on_close(self):
        self.connect_users.remove(self)
    
    # 接收到消息
    def on_message(self, message): 
        self.write_message("接收到客戶端的消息:{}".format(message))

    # 所有用戶發(fā)送消息
    @classmethod
    def send_demand_updates(cls, message):
        # 使用@classmethod可以使類方法在調(diào)用的時候不用進(jìn)行實(shí)例化
        # 給所有用戶推送消息(此處可以根據(jù)需要,修改為給指定用戶進(jìn)行推送消息)
        for user in cls.connect_users:
            user.write_message(message)

    # 允許WebSocket的跨域請求
    def check_origin(self, origin):
        return True

if __name__ == "__main__":
    # 調(diào)用
    wsHandler。send_demand_updates("服務(wù)端發(fā)送給客戶端的消息")



注意:示例中使用python語言,需依托tornado框架搭建后端web服務(wù)端,文章中不再說明如何搭建服務(wù)端,感興趣的小伙伴可自行嘗試。tornado內(nèi)置websocket模塊,能更簡單的支持使用websocket。

6、總結(jié)

websocket提供了一種低延遲、高性能的雙向數(shù)據(jù)通信,不同與web開發(fā)的請求、處理、等待響應(yīng)模式,它是客戶端、服務(wù)端因?yàn)橥粋€連接直接就可以數(shù)據(jù)互傳的模式,特別適合實(shí)時數(shù)據(jù)交互的應(yīng)用進(jìn)行開發(fā)。

實(shí)用點(diǎn):

1、websocket連接建立后,后續(xù)的數(shù)據(jù)傳輸都將以幀序列的形式傳輸;

2、在客戶端斷開websocket連接或服務(wù)端中斷連接前,不需要客戶端和服務(wù)端重新發(fā)起連接請求;

3、在海量并發(fā)、客戶端與服務(wù)器交互負(fù)載流量大的情況下,節(jié)省網(wǎng)絡(luò)帶寬資源的消耗,且客戶端發(fā)送與接收消息,都是在同一個持久連接上進(jìn)行,實(shí)現(xiàn)了“真長連接”,真正的實(shí)現(xiàn)即時通信。

作者:京東物流 駱銅磊

來源:京東云開發(fā)者社區(qū) 自猿其說Tech 轉(zhuǎn)載請注明來源文章來源地址http://www.zghlxwxcb.cn/news/detail-746059.html

到了這里,關(guān)于WebSocket魔法師:打造實(shí)時應(yīng)用的無限可能的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 實(shí)現(xiàn)實(shí)時互動:用Spring Boot原生WebSocket打造你的專屬聊天室

    實(shí)現(xiàn)實(shí)時互動:用Spring Boot原生WebSocket打造你的專屬聊天室

    ?? @ 作者: 一恍過去 ?? @ 主頁: https://blog.csdn.net/zhuocailing3390 ?? @ 社區(qū): Java技術(shù)棧交流 ?? @ 主題: 實(shí)現(xiàn)實(shí)時互動:用Spring Boot原生WebSocket打造你的專屬聊天室 ?? @ 創(chuàng)作時間: 2023年08月04日 WebSocket 實(shí)現(xiàn)聊天室的原理包括建立 WebSocket 連接的握手過程、保持連接狀態(tài)以

    2024年02月10日
    瀏覽(25)
  • 實(shí)時包裹信息同步:WebSocket 在 Mendix 中的應(yīng)用

    實(shí)時包裹信息同步:WebSocket 在 Mendix 中的應(yīng)用

    在現(xiàn)代物流中,能夠?qū)崟r跟蹤包裹信息,尤其是包裹重量,是非常重要的。在這種場景中,我們可以使用稱重設(shè)備獲取包裹的信息,然后實(shí)時將這些信息同步給 Mendix 開發(fā)的 App,并在 App 的頁面上實(shí)時顯示包裹信息。這種實(shí)時的、無縫的信息同步提供了一個更好的用戶體驗(yàn),

    2024年02月13日
    瀏覽(24)
  • 鴻蒙應(yīng)用開發(fā)-錄音并使用WebSocket實(shí)現(xiàn)實(shí)時語音識別

    鴻蒙應(yīng)用開發(fā)-錄音并使用WebSocket實(shí)現(xiàn)實(shí)時語音識別

    功能介紹: 錄音并實(shí)時獲取RAW的音頻格式數(shù)據(jù),利用WebSocket上傳數(shù)據(jù)到服務(wù)器,并實(shí)時獲取語音識別結(jié)果,參考文檔使用AudioCapturer開發(fā)音頻錄制功能(ArkTS),更詳細(xì)接口信息請查看接口文檔:AudioCapturer8+和@ohos.net.webSocket (WebSocket連接)。 知識點(diǎn): 熟悉使用AudioCapturer錄音并實(shí)時

    2024年04月25日
    瀏覽(22)
  • Stable Diffusion:開啟AI魔法繪畫的無限可能

    Stable Diffusion:開啟AI魔法繪畫的無限可能

    ?? 個人網(wǎng)站:【 海擁】【神級代碼資源網(wǎng)站】【辦公神器】 ?? 基于Web端打造的:??輕量化工具創(chuàng)作平臺 ?? 想尋找共同學(xué)習(xí)交流的小伙伴,請點(diǎn)擊【全棧技術(shù)交流群】 隨著人工智能技術(shù)的蓬勃發(fā)展,圖像生成和藝術(shù)創(chuàng)作領(lǐng)域掀起了一股新的浪潮。在這股浪潮中,Stable Di

    2024年02月04日
    瀏覽(31)
  • 僅需3步!開啟Midjourney免費(fèi)無限做圖魔法~

    僅需3步!開啟Midjourney免費(fèi)無限做圖魔法~

    信息過載時代,用最精簡的方式說AI !!緊急更新:原免費(fèi)免限做圖方法已失效,最新降成本方法見以下3.30更新內(nèi)容 這幾天你多半刷到過類似這樣的圖: 將信將疑? 那咱們來看看AIGC圖片生成領(lǐng)域的當(dāng)紅炸子雞【Midjourney】能做些什么吧。 街拍大片 卡通漫畫 甚至-汽車設(shè)計圖

    2024年04月16日
    瀏覽(31)
  • 揭秘AI魔法繪畫:Stable Diffusion引領(lǐng)無限創(chuàng)意新紀(jì)元

    揭秘AI魔法繪畫:Stable Diffusion引領(lǐng)無限創(chuàng)意新紀(jì)元

    隨著科技的飛速發(fā)展,人工智能已經(jīng)滲透到我們生活的方方面面。在藝術(shù)領(lǐng)域,AI技術(shù)的應(yīng)用也日益廣泛,為我們帶來了前所未有的視覺體驗(yàn)。今天,我們將探討一種名為Stable Diffusion的AI魔法繪畫技術(shù),它如何挑戰(zhàn)無限可能,為藝術(shù)家和設(shè)計師提供全新的創(chuàng)作空間。 首先,讓

    2024年02月05日
    瀏覽(23)
  • Spring Boot實(shí)踐:構(gòu)建WebSocket實(shí)時通信應(yīng)用程序并創(chuàng)建訂閱端點(diǎn)

    作為一款流行的Java開發(fā)框架,Spring Boot可以輕松地集成WebSocket。WebSocket能夠?yàn)閃eb應(yīng)用程序提供實(shí)時通信功能,而Spring Boot的優(yōu)秀特性使得它可以很容易地實(shí)現(xiàn)WebSocket的集成。在本篇文章中,我們將演示如何使用Spring Boot框架來構(gòu)建一個簡單的WebSocket應(yīng)用程序。 1. 創(chuàng)建Spring Boo

    2024年02月01日
    瀏覽(22)
  • 實(shí)時通信應(yīng)用的開發(fā):Vue.js、Spring Boot 和 WebSocket 整合實(shí)踐

    實(shí)時通信應(yīng)用的開發(fā):Vue.js、Spring Boot 和 WebSocket 整合實(shí)踐

    目錄 1.?什么是webSocket? 2.?webSocket可以用來做什么? 3.?webSocket協(xié)議 4. 服務(wù)器端 5. 客戶端 6. 測試通訊 WebSocket 是一種在單個 TCP連接 上進(jìn)行全雙工通信的協(xié)議。WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允 許服務(wù)端主動向客戶端推送數(shù)據(jù) 。在WebSocket API中,瀏覽

    2024年02月11日
    瀏覽(26)
  • 數(shù)字魔法AI繪畫的藝術(shù)奇跡-用Stable Diffusion挑戰(zhàn)無限可能【文末送書-12】

    數(shù)字魔法AI繪畫的藝術(shù)奇跡-用Stable Diffusion挑戰(zhàn)無限可能【文末送書-12】

    隨著人工智能技術(shù)的迅猛發(fā)展,AI在各個領(lǐng)域展現(xiàn)出驚人的創(chuàng)造力和潛力。在藝術(shù)領(lǐng)域,AI技術(shù)已經(jīng)開始嶄露頭角,其中一項(xiàng)引人注目的技術(shù)就是AI魔法繪畫。通過機(jī)器學(xué)習(xí)和深度學(xué)習(xí)算法,AI不僅能夠模仿人類藝術(shù)家的風(fēng)格,還能夠創(chuàng)造出獨(dú)一無二的數(shù)字藝術(shù)品。本文將深入

    2024年02月04日
    瀏覽(27)
  • Qt魔法書:打造自定義鼠標(biāo)鍵盤腳本

    在我們的日常生活和工作中,腳本扮演著重要的角色。它們就像是一種“自動化的魔法”,可以幫助我們完成各種復(fù)雜、繁瑣的任務(wù),從而提高效率,節(jié)省時間。這就像是我們擁有了一個個小助手,他們可以按照我們的指示,自動完成我們需要的工作。 腳本的重要性不僅體現(xiàn)

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包