电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

WebSocket使用以及在vue如何使用問(wèn)題

瀏覽:173日期:2022-06-10 08:02:28
目錄
  • WebSocket
  • WebSocket 實(shí)例
  • socket.io 簡(jiǎn)介
  • 客戶端 api
  • 總結(jié)

WebSocket

WebSocket 是 HTML5 開(kāi)始提供的一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議。

WebSocket 使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡(jiǎn)單,允許服務(wù)端主動(dòng)向客戶端推送數(shù)據(jù)。在 WebSocket API 中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進(jìn)行雙向數(shù)據(jù)傳輸

在 WebSocket API 中,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。

現(xiàn)在,很多網(wǎng)站為了實(shí)現(xiàn)推送技術(shù),所用的技術(shù)都是 Ajax 輪詢。輪詢是在特定的的時(shí)間間隔(如每 1 秒),由瀏覽器對(duì)服務(wù)器發(fā)出 HTTP 請(qǐng)求,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。

這種傳統(tǒng)的模式帶來(lái)很明顯的缺點(diǎn),即瀏覽器需要不斷的向服務(wù)器發(fā)出請(qǐng)求,然而 HTTP 請(qǐng)求可能包含較長(zhǎng)的頭部,其中真正有效的數(shù)據(jù)可能只是很小的一部分,顯然這樣會(huì)浪費(fèi)很多的帶寬等資源。

HTML5 定義的 WebSocket 協(xié)議,能更好的節(jié)省服務(wù)器資源和帶寬,并且能夠更實(shí)時(shí)地進(jìn)行通訊。

瀏覽器通過(guò) JavaScript 向服務(wù)器發(fā)出建立 WebSocket 連接的請(qǐng)求,連接建立以后,客戶端和服務(wù)器端就可以通過(guò) TCP 連接直接交換數(shù)據(jù)

當(dāng)你獲取 Web Socket 連接后,你可以通過(guò) send() 方法來(lái)向服務(wù)器發(fā)送數(shù)據(jù),并通過(guò) onmessage 事件來(lái)接收服務(wù)器返回的數(shù)據(jù)。

WebSocket 實(shí)例

WebSocket 協(xié)議本質(zhì)上是一個(gè)基于 TCP 的協(xié)議。

為了建立一個(gè) WebSocket 連接,客戶端瀏覽器首先要向服務(wù)器發(fā)起一個(gè) HTTP 請(qǐng)求,這個(gè)請(qǐng)求和通常的 HTTP 請(qǐng)求不同,包含了一些附加頭信息,其中附加頭信息"Upgrade: WebSocket"表明這是一個(gè)申請(qǐng)協(xié)議升級(jí)的 HTTP 請(qǐng)求,服務(wù)器端解析這些附加的頭信息然后產(chǎn)生應(yīng)答信息返回給客戶端,客戶端和服務(wù)器端的 WebSocket 連接就建立起來(lái)了,雙方就可以通過(guò)這個(gè)連接通道自由的傳遞信息,并且這個(gè)連接會(huì)持續(xù)存在直到客戶端或者服務(wù)器端的某一方主動(dòng)的關(guān)閉連接

<!DOCTYPE html><html>    <head><meta charset="utf-8" /><title>菜鳥(niǎo)教程(runoob.com)</title><script type="text/javascript">    function WebSocketTest() {if ("WebSocket" in window) {    alert("您的瀏覽器支持 WebSocket!")    // 打開(kāi)一個(gè) web socket    var ws = new WebSocket("ws://localhost:9998/echo")    ws.onopen = function () {// Web Socket 已連接上,使用 send() 方法發(fā)送數(shù)據(jù)ws.send("發(fā)送數(shù)據(jù)")alert("數(shù)據(jù)發(fā)送中...")    }    ws.onmessage = function (evt) {var received_msg = evt.dataalert("數(shù)據(jù)已接收...")    }    ws.onclose = function () {// 關(guān)閉 websocketalert("連接已關(guān)閉...")    }} else {    // 瀏覽器不支持 WebSocket    alert("您的瀏覽器不支持 WebSocket!")}    }</script>    </head>    <body><div id="sse">    <a href="javascript:WebSocketTest()" rel="external nofollow" >運(yùn)行 WebSocket</a></div>    </body></html>

socket.io 簡(jiǎn)介

socket.io 是一個(gè)類庫(kù),內(nèi)部封裝了 WebSocket,可以在瀏覽器與服務(wù)器之間建立實(shí)時(shí)通信。

如果某些舊版本的瀏覽器不支持 WebSocket,socket.io 會(huì)使用輪詢代替。另外它還具有可發(fā)送二進(jìn)制消息、多路復(fù)用、創(chuàng)建房間等特性,因此相比直接使用原生 WebSocket,socket.io 是更好的選擇。

開(kāi)發(fā)一個(gè)實(shí)時(shí)應(yīng)用主要分兩部分:服務(wù)端和客戶端,socket.io 分別提供了相應(yīng)的 npm 包供我們方便地調(diào)用。

接下來(lái)就通過(guò)一個(gè)生動(dòng)形象且有趣的栗子分別介紹這兩大塊。

現(xiàn)在假設(shè)李白張三,李四,王五 3 個(gè)人加入了一個(gè)叫 棋牌室 的房間,在文章結(jié)束時(shí)我們將擁有一個(gè)麻雀雖小五臟俱全的峽谷英雄在線聊天室。

客戶端 api

npm i socket.io-client  //安裝socket.io 為客戶端提供的npm包

接下來(lái)就可以在頁(yè)面上建立到服務(wù)器的連接了

import io from "socket.io-client"const socket = io("http://127.0.0.1:3001") // 建立連接

向服務(wù)器發(fā)送消息

const socket = io("http://127.0.0.1:3001")socket.emit("talk", "打快點(diǎn)啊,天都要黑了")

接收服務(wù)器發(fā)來(lái)的信息

const socket = io("http://127.0.0.1:3001")socket.on("talk", (data) => {    console.log(data) //打印data})

李白看到了瑤的消息,強(qiáng)忍住問(wèn)候?qū)Ψ郊胰说臎_動(dòng),像哄那啥似地說(shuō)道:

const socket = io("http://127.0.0.1:3001")socket.on("talk", (data) => {    socket.emit("talk", "你這么敢干啥!")})

客戶端的功能到這基本上也開(kāi)發(fā)完了。

核心 api 就是 on 和 emit 用于收發(fā)消息,既簡(jiǎn)單又優(yōu)雅。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 磁力抛光研磨机_超声波清洗机厂家_去毛刺设备-中锐达数控 | 广西教师资格网-广西教师资格证考试网 | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 深圳公司注册-工商注册公司-千百顺代理记账公司 | 液氮罐_液氮容器_自增压液氮罐-北京君方科仪科技发展有限公司 | WF2户外三防照明配电箱-BXD8050防爆防腐配电箱-浙江沃川防爆电气有限公司 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司 | 三轴曲线机-端子插拔力试验机|华杰仪器| 混合反应量热仪-高温高压量热仪-微机差热分析仪DTA|凯璞百科 | 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 仿真茅草_人造茅草瓦价格_仿真茅草厂家_仿真茅草供应-深圳市科佰工贸有限公司 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 盐水蒸发器,水洗盐设备,冷凝结晶切片机,转鼓切片机,絮凝剂加药系统-无锡瑞司恩机械有限公司 | Eiafans.com_环评爱好者 环评网|环评论坛|环评报告公示网|竣工环保验收公示网|环保验收报告公示网|环保自主验收公示|环评公示网|环保公示网|注册环评工程师|环境影响评价|环评师|规划环评|环评报告|环评考试网|环评论坛 - Powered by Discuz! | 英国雷迪地下管线探测仪-雷迪RD8100管线仪-多功能数字听漏仪-北京迪瑞进创科技有限公司 | 维泰克Veertek-锂电池微短路检测_锂电池腐蚀检测_锂电池漏液检测 | 免费个人pos机申请办理-移动pos机刷卡-聚合收款码办理 | 鑫铭东办公家具一站式定制采购-深圳办公家具厂家直销 | 气动球阀_衬氟蝶阀_调节阀_电动截止阀_上海沃托阀门有限公司 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 苏州教学设备-化工教学设备-环境工程教学模型|同科教仪 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 变色龙云 - 打包app_原生app_在线制作平台_短链接_ip查询 | 时代北利离心机,实验室离心机,医用离心机,低速离心机DT5-2,美国SKC采样泵-上海京工实业有限公司 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 湖南自考_湖南自学考试网 | PCB厂|线路板厂|深圳线路板厂|软硬结合板厂|电路板生产厂家|线路板|深圳电路板厂家|铝基板厂家|深联电路-专业生产PCB研发制造 | 报警器_家用防盗报警器_烟雾报警器_燃气报警器_防盗报警系统厂家-深圳市刻锐智能科技有限公司 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 聚氨酯保温钢管_聚氨酯直埋保温管道_聚氨酯发泡保温管厂家-沧州万荣防腐保温管道有限公司 | 东莞韩创-专业绝缘骨架|马达塑胶零件|塑胶电机配件|塑封电机骨架厂家 | 除湿机|工业除湿机|抽湿器|大型地下室车间仓库吊顶防爆除湿机|抽湿烘干房|新风除湿机|调温/降温除湿机|恒温恒湿机|加湿机-杭州川田电器有限公司 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 法钢特种钢材(上海)有限公司 - 耐磨钢板、高强度钢板销售加工 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 新能源汽车教学设备厂家报价[汽车教学设备运营18年]-恒信教具 | 冰晶石|碱性嫩黄闪蒸干燥机-有机垃圾烘干设备-草酸钙盘式干燥机-常州市宝康干燥 | 东莞市天进机械有限公司-钉箱机-粘箱机-糊箱机-打钉机认准东莞天进机械-厂家直供更放心! | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 交联度测试仪-湿漏电流测试仪-双85恒温恒湿试验箱-常州市科迈实验仪器有限公司 | 水成膜泡沫灭火剂_氟蛋白泡沫液_河南新乡骏华消防科技厂家 | 展厅设计公司,展厅公司,展厅设计,展厅施工,展厅装修,企业展厅,展馆设计公司-深圳广州展厅设计公司 |