vue3中websocket用法

1.0 認識 websocket

#1.0.1 什么是 websocket

和 http 協議類似,websocket 也是是一個網絡通信協議,是用來滿足前后端數據通信的。

#1.0.2 websocket 相比于 HTTP 的優勢

HTTP 協議:客戶端與服務器建立通信連接之后,服務器端只能被動地響應客戶端的請求,無法主動給客戶端發送消息。

websocket 協議:客戶端與服務器建立通信連接之后,服務器端可以主動給客戶端推送消息了!!!

#1.0.3 websocket 主要的應用場景

需要服務端主動向客戶端發送數據的場景,比如我們現在要做的智能聊天

#1.0.4 HTTP 協議和 websocket 協議對比圖

1.1 vue3組合api中socket.io-client 的基本使用

#1.1.1 安裝和配置 socket.io-client

參考?socket.io-client?的官方文檔進行配置和使用

  1. 在項目中運行如下的命令,安裝 websocket 客戶端相關的包:

    npm i socket.io-client@4.0.0 -S# 如果 npm 無法成功安裝 socket.io-client,可以嘗試用 yarn 來裝包
    # yarn add socket.io-client@4.0.0
    
  2. 在?xx.vue?組件中,從?socket.io-client?模塊內按需導入?io?方法:

    // 按需導入 io 方法:調用 io('url') 方法,即可創建 websocket 連接的實例
    import { io } from 'socket.io-client'
    
  3. 事先setup中定義變量?socket,用來接收?io()?方法創建的 socket 實例:

    let socket = null
    

#1.1.2 創建和銷毀 socket 實例

  1. 在?xx.vue?組件的setup?onMounted生命周期函數中,創建 websocket 實例對象:

    onMounted(() => {// 創建客戶端 websocket 的實例socket = io('ws://www.liulongbin.top:9999')
    })
    
  2. 在 xx.vue?組件的setup?onBeforeUnmount生命周期函數中,關閉 websocket 連接銷毀 websocket 實例對象

    // 組件被銷毀之前,清空 sock 對象
    onBeforeUnmount(() => {// 關閉連接socket.close()// 銷毀 websocket 實例對象socket = null
    })
    

#1.1.3 監聽連接的建立和關閉

  1. 在?xx.vue?組件的setup??onMounted?生命周期函數中,調用?socket.on('connect', fn)?方法,可以監聽到 socket 連接成功的事件:

    // 建立連接的事件
    socket.on('connect', () => console.log('connect: websocket 連接成功!'))
    
  2. 在?xx.vue?組件的?created?生命周期函數中,調用?socket.on('disconnect', fn)?方法,可以監聽到 socket 連接關閉的事件:

    // 關閉連接的事件
    socket.on('disconnect', () => console.log('disconnect: websocket 連接關閉!'))
    

#1.1.4 接收服務器發送的消息

  1. 在?Chat.vue?組件的?setup??onMounted?生命周期函數中,調用?socket.on('message', fn)?方法,即可監聽到服務器發送到客戶端的消息:

    // 接收到消息的事件
    socket.on('message', msg => console.log(msg))
    
  2. 將服務器發送到客戶端的消息,存儲到 xx.vue?組件的?list?數組中:

    // 接收到消息的事件
    socket.on('message', msg => {// 把服務器發送過來的消息,存儲到 list 數組中this.list.push({ name: 'xs', msg })
    })
    

#1.1.5 向服務器發送消息

  1. 客戶端調用?socket.emit('send', '消息內容')?方法,即可向 websocket 服務器發送消息:

    // 提交按鈕的點擊事件處理函數
    const send = () => {// 如果輸入的聊天內容為空,則 return 出去if (!this.word) return// 向服務器發送消息socket.emit('send', this.word)// 將用戶填寫的消息存儲到 list 數組中this.list.push({ name: 'me', msg: this.word })// 清空文本框中的消息內容this.word = ''
    }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247279.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247279.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247279.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

介紹幾個醫學圖像處理會議

Information Processing in Medical Imaging , IPMI ,醫學圖像處理最頂級的會議,兩年召開一次,全球大概入選 50 篇左右,一個非常小圈子的會,據說通常是關在一個偏僻的地方開一周,會議口頭報告提…

python翻譯

translator.py # -*- coding: utf-8 -*- # author: inspurer(月小水長) # pc_type lenovo # create_time: 2019/4/6 15:44 # file_name: translator.py # github https://github.com/inspurer # qq郵箱 2391527690qq.co…

promise并發

一、Pomise.all的使用 Promise.all可以將多個Promise實例包裝成一個新的Promise實例。同時,成功和失敗的返回值是不同的,成功的時候返回的是一個結果數組,而失敗的時候則返回最先被reject失敗狀態的值。 let p1 new Promise((resolve, rej…

計算機視覺方面的三大國際會議是ICCV, CVPR和ECCV

ICCV的全稱是International Comference on Computer Vision,正如很多和他一樣的名字的會議一行,這樣最樸實的名字的會議,通常也是這方面最nb的會議。ICCV兩年一次,與ECCV正好錯開,是公認的三個會議中級別最高的。它的舉…

Scanner類+Random

引用數據類型的使用 數據類型 變量名 new 數據類型(); 變量名.方法名(); import java.util.Scanner; publicclass ScannerDemo01 { publicstaticvoid main(String[] args) { //創建Scanner引用類型的變量 Scanner sc new Scanner(System.in); //獲取數字 System.out.print…

手寫vue2的Lazyload

調用方式,express寫個后臺服務調圖片,具體使用不貼了 import VueLazyload from "./modules/vue-lazyload";Vue.use(VueLazyload,{loading: http://localhost:3000/images/loading.gif,error: http://localhost:3000/images/error.jpg,preload…

nature,science上關于計算機視覺的一些原創文獻

真正原始創新是怎么樣的?希望這些列表對做視覺研究的朋友有些啟發,希望大家能幫我補充一些,謝謝。轉載請注明http://hi.baidu.com/daren007或者http://www.sciencenet.cn/blog/王中任.htm。1、D. Marr; T. Poggio.Cooperative Computation of…

webpack入門進階調優第一章

1.1何為Webpack webpack是開源的JS模塊打包工具 核心功能是解決模塊之間的依賴,吧哥哥模塊按照特定的規則和順序組織在一起,最終合并為一個JS文件。這個過程叫模塊打包 1.2為何需要Webpack 1.2.1何為模塊 在設計程序結構時,更好的組織方…

python類的空間問題及類之間的關系

類的空間問題及類之間的關系 類的空間問題 1.何處可以添加對象屬性 class A:def __init__(self,name):self.name namedef func(self,sex):self.sex sexobj A("alex") obj.age 18 # 通過__init__方法添加 print(obj.__dict__) obj1 A("wusir") obj.fun…

計算機視覺應關注的資源

來自美國帝騰大學的鏈接。 Camera Calibration Links to toolboxes (mostly MATLAB) for camera calibration. Paul Debevec. Modeling and Rendering Architecture from Photographs. Marc Pollefeys, Tutorial on 3D Modeling from Images,, ECCV 2000, Available here: not…

Angular 內容投影 II

內容投影是一種模式,你可以在其中插入或投影要在另一個組件中使用的內容。 簡單來說,angular的內容投影就相當于vue的內容插槽slot。所有一下就能懂了。 1、單插槽內容投影 單插槽內容投影是指創建一個組件,你可以在其中投影一個組件。如果只有一個ng-content,不需要sel…

麻省理工學生發明 震驚世界

核心提示:在普拉納夫看來,數字信息以像素的形式被限制在顯示屏幕之中。他發明的"第六感裝置"震驚全場,讓世界為之驚嘆。 MIT(麻省理工)印度裔學生Prarnav Mistry的天才發明:“第六感裝置” 視頻地址:http://v.youku.com…

Selenium常用API的使用java語言之13-多表單切換

在 Web 應用中經常會遇到 frame/iframe 表單嵌套頁面的應用, WebDriver 只能在一個頁面上對元素識別與 定位, 對于 frame/iframe 表單內嵌頁面上的元素無法直接定位。 這時就需要通過 switchTo().frame()方法將當前定 位的主體切換為 frame/iframe 表單的…

yarn下載依賴慢的解決方法

首先設置npm或者yarn鏡像為淘寶鏡像 詳情: 淘寶 NPM 鏡像 npm config set registry https://registry.npm.taobao.org OR yarn config set registry https://registry.npm.taobao.org 在項目的根目錄添加.npmrc 或者 .yarnrc 把鏡像源設置淘寶鏡像,nod…

立身成敗 在于所染

唐朝有一位正直的丞相很受唐太宗的賞識,他叫魏征。他說過一句話:“立身成本在于所染”。這句話的意思就是說,一個人一生成敗的關鍵在于交友。 孔子曰:“與善人居,如入芝蘭之室,久而不聞其香,即與…

Java生鮮電商平臺-優惠券系統的架構設計與源碼解析

Java生鮮電商平臺-優惠券系統的架構設計與源碼解析 電商后臺:實例解讀促銷系統 電商后臺系統包括商品管理系統、采購系統、倉儲系統、訂單系統、促銷系統、維權系統、財務系統、會員系統、權限系統等,各系統之間相互關聯、相互依托,為前端的正…

react-router-dom v6.1.1 使用方式

v5版本例子代碼 import {BrowserRouter as Router, Switch, Route} from react-router-dom import App from /App import Home from /views/Home/Home import Fast from /views/Fast/Fast import User from /views/User/Userconst BaseRouter () > {return (<Router>…

VC 2010下安裝OpenCV2.4.4

說明&#xff1a; 安裝平臺&#xff1a;32位XP&#xff0c;VS2010&#xff1b;OpenCV 2.4.4不支持VC 6.0&#xff1b;網上有很多用CMake編譯OpenCV的安裝教程&#xff0c;這里建議先不要自己編譯&#xff0c;如果使用預編譯好的庫有問題&#xff0c;再嘗試自己編譯。希望大家好…

vue3源碼中的最長遞增子序列

求解最長遞增子序列是一道經典的算法題, 多數解法是使用動態規劃的思想&#xff0c;算法的時間復雜度是O(); 而Vue.js內部使用的是維基百科提供的一套“貪心二分查找”的算法; 貪心算法的時間復雜度是O(n)&#xff0c;二分查找的時間復雜度是O(logn)&#xff0c;總時間復雜度…

認識“數字圖像”

不同領域的人對圖像的概念有著不同的理解。從工程學角度上講&#xff0c;“圖”是物體透射或反射光的分布&#xff1b;“像”是人的視覺系統對圖的接收在大腦中形成的印象或認識。因此&#xff0c;圖像常與光照、視覺等概念聯系在一起&#xff0c;光的強弱、光的波長以及物體的…