亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Websocket通信協(xié)議在數(shù)字孿生中的應(yīng)用

 更新時間:2022年07月08日 10:37:41   作者:YimWu  
這篇文章主要為大家介紹了Websocket通信協(xié)議在數(shù)字孿生中的應(yīng)用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

寫在前面

面試官:除了 HTTP,你還用過什么通信協(xié)議?

答:Websocket 在數(shù)字孿生中的應(yīng)用

隨著 數(shù)智化 轉(zhuǎn)型的推進,越來越多行業(yè)開始加入 數(shù)智化改造 大軍,所謂數(shù)智化,其實就是數(shù)據(jù)化、智能化,主要強調(diào)的是利用目前發(fā)展迅猛的計算機、網(wǎng)絡(luò)技術(shù)、AI等先進技術(shù),對傳統(tǒng)行業(yè)進行改造、賦能,促進傳統(tǒng)行業(yè)向先進技術(shù)靠攏,通過先進技術(shù)的賦能,使傳統(tǒng)行業(yè)得到更快的發(fā)展。

而在這一波轉(zhuǎn)型中,尤其亮眼的就要數(shù) 數(shù)字孿生 這個概念了,數(shù)字孿生在我看來,可以簡單分兩部分理解:
第一部分為同步孿生,即利用各種方式采集到的各種數(shù)據(jù),通過糅合、整理,在計算機上模擬出與現(xiàn)實世界相同的東西,即 孿生,并且在現(xiàn)實世界發(fā)生變化時,孿生世界中的事物能夠呈現(xiàn)相同的狀態(tài)。

第二部分為預(yù)測孿生,即通過對于大量數(shù)據(jù)的采集、分析,能夠?qū)?shù)據(jù)與事物發(fā)展的態(tài)勢進行結(jié)合,建立模型,達到預(yù)測、模擬效果,提前預(yù)防災(zāi)難發(fā)生等。

目前來看,業(yè)界開發(fā)出來的數(shù)字孿生產(chǎn)品中,分為二維、三維、二維 + 三維這幾種模式,其中二維數(shù)字孿生主要是將現(xiàn)實世界的數(shù)據(jù)做處理后,利用各種可視化表格進行展示,而三維數(shù)字孿生則是利用 WebGL、Three、UE4 等技術(shù),將現(xiàn)實場景直接建模、完全孿生到計算機上,通過數(shù)據(jù)孿生,展示與現(xiàn)實場景相同的孿生場景。

數(shù)字孿生內(nèi)容很多,本次先從簡單的二維數(shù)字孿生的數(shù)據(jù)展示入手,介紹一下二維數(shù)據(jù)孿生應(yīng)用最簡單的模塊。

數(shù)字孿生中的通訊協(xié)議

Websocket 是什么

WebSocket 是一種在單個 TCP 連接上進行 全雙工 通信的協(xié)議。WebSocket通信協(xié)議于2011年被[IETF]定為標(biāo)準(zhǔn)RFC 6455,并由RFC7936補充規(guī)范。WebSocket API也被 W3C 定為標(biāo)準(zhǔn)。

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

Websocket 配置

本次以 Echarts 作為展示數(shù)據(jù)的表格,Node.js 服務(wù)器作為數(shù)據(jù)源,演示簡單的數(shù)據(jù)更新通訊過程

基于 Node.js 的 Websocket 服務(wù)器搭建

創(chuàng)建 Websocket Server

// 引入 ws 模塊
const WebSocket = require('ws');
// 創(chuàng)建 server 實例并監(jiān)聽 3000 端口
const server = new WebSocket.Server({host:'localhost',port:3000},()=>{
  console.log('WebsocketServer Start !')
});

添加客戶端連接成功回調(diào)

當(dāng)客戶端對服務(wù)端發(fā)起連接時,服務(wù)端能夠在 connection 事件中收到請求

server.on('connection',(client)=>{
  console.log('連接成功')
})

添加客戶端消息回調(diào)

由于 Websocket 是全雙工的,所以客戶端和服務(wù)端都可以向?qū)Ψ桨l(fā)送消息,因此,我們需要添加消息回調(diào),接收客戶端發(fā)送的消息

server.on('connection',(client)=>{
  console.log('連接成功')
  // 添加消息回調(diào)
  client.on('message',(msg)=>{
    console.log(msg);
  })
})

基于Vue 的 Websocket 客戶端搭建

客戶端與服務(wù)端基本差不多,創(chuàng)建連接、添加連接回調(diào)、消息回調(diào)

var ws = new WebSocket("ws://localhost:3000");
//服務(wù)端向客戶端連接執(zhí)行
ws.onopen = ()=>{
  console.log('連接建立')
}
ws.onmessage = (msg) => {
  console.log('收到消息:', msg.data)
}

通過 Websocket 更新 Echart 表格數(shù)據(jù)(基于 Vue + node)

搭建 echart 柱狀圖結(jié)構(gòu)

<template>
  <div id="Websocket-container"></div>
</template>

添加柱狀圖初始化參數(shù)

init(){
  var chartDom = document.getElementById('Websocket-container');
  this.myChart = echarts.init(chartDom);
  var option;
  option = {
    xAxis: {
      type: 'category',
      data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    },
    yAxis: {
      type: 'value'
    },
    series: [
      {
        data: [120, 200, 150, 80, 70, 110, 130],
        type: 'bar',
        showBackground: true,
        backgroundStyle: {
          color: 'rgba(180, 180, 180, 0.2)'
        }
      }
    ]
  }
  option && this.myChart.setOption(option);
},

添加柱狀圖更新函數(shù)

update(newData) {
  let option = {
    series: {
      data: newData,
    }
  }
  this.myChart.setOption(option)
},

添加 Websocket 連接與接收數(shù)據(jù)函數(shù)

initWebsocket(){
  var ws = new WebSocket("ws://localhost:3000");
  //服務(wù)端向客戶端連接執(zhí)行
  ws.onopen = ()=>{
    console.log('連接建立')
  }
  ws.onmessage = (msg) => {
    console.log('收到消息:', msg.data)
    this.update(JSON.parse(msg.data))
  }
}

向 Websocket Server 添加生成隨機數(shù)據(jù)的函數(shù)

通過生成隨機的數(shù)據(jù),模擬現(xiàn)實中數(shù)據(jù)的變化,并推送到前端

function createDatas(){
  let arr = []
  for(let i=0;i<7;i++){
    arr.push(Math.floor(Math.random()*100))
  }
  console.log(arr)
  return arr
}

添加數(shù)據(jù)監(jiān)控函數(shù),即數(shù)據(jù)更新函數(shù)

// 每 5s 想前端更新一次
function startMonitor(client){
  setInterval(() => {
    let newDatas = createDatas() 
    client.send(JSON.stringify(newDatas))
  }, 1000 * 5);
}

將數(shù)據(jù)監(jiān)控函數(shù)綁定到 Websocket 的 connection 事件回調(diào)中

server.on('connection',(client)=>{
	console.log('連接成功')
  // 添加消息回調(diào)
  client.on('message',(msg)=>{
		console.log(msg);
	})
  // 開始數(shù)據(jù)監(jiān)聽,當(dāng)數(shù)據(jù)更新時想客戶端推送數(shù)據(jù)
  startMonitor(client)
})

啟動前端、后端,測試效果

為何采用 Websocket 而不是 HTTP

首先我們知道對于數(shù)字孿生這樣的應(yīng)用場景,實時同步現(xiàn)實數(shù)據(jù)到孿生世界是必要的環(huán)節(jié),而當(dāng)數(shù)據(jù)發(fā)送變化時,孿生世界如果想要做到立即響應(yīng),那么就需要立刻通過網(wǎng)絡(luò)獲取數(shù)據(jù)

采用 HTTP

HTTP 作為單工通訊,服務(wù)器無法主動推送數(shù)據(jù)到前端,那么只能采用輪詢的方式,而采取這樣子的方式有一個矛盾點存在,一方面,為了更加實時的獲取到最新的數(shù)據(jù),輪詢的間隔時間應(yīng)該盡可能小,而另一方面,由于發(fā)送 HTTP 會耗費大量的流量,所以輪詢時間應(yīng)該盡可能大,從而節(jié)省流量的浪費,因此,采取 HTTP 輪詢的方式很難拿出可靠、高效的方案

采用 Websocket

Websocket 作為全雙工的通訊方式,它能夠做到當(dāng)服務(wù)器檢測到數(shù)據(jù)更新的時候,主動向客戶端推送數(shù)據(jù),而在沒有數(shù)據(jù)更新的時候,網(wǎng)絡(luò)帶寬完全是空閑的,不會像采用 HTTP 一樣,中間會有無數(shù)次無意義的數(shù)據(jù)請求,所以采取 Websocket 才是更加合理的數(shù)據(jù)更新方式

總結(jié)

通過對于數(shù)字孿生應(yīng)用場景的學(xué)習(xí)和實踐,能夠了解到與以往習(xí)慣的通過 HTTP 接口獲取數(shù)據(jù)并進行渲染所不同的方式,也看到了更多的可能,對于數(shù)字孿生,這里所介紹的 Websocket 可能連冰山一角都算不上,希望繼續(xù)深入研究,探索更多、更深入的 數(shù)字孿生相關(guān)的技術(shù),更多關(guān)于Websocket數(shù)字孿生的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • echarts餅圖各個板塊之間的空隙如何實現(xiàn)

    echarts餅圖各個板塊之間的空隙如何實現(xiàn)

    這篇文章主要給大家介紹了關(guān)于echarts餅圖各個板塊之間的空隙如何實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 深入理解ES6之?dāng)?shù)據(jù)解構(gòu)的用法

    深入理解ES6之?dāng)?shù)據(jù)解構(gòu)的用法

    本文介紹了深入理解ES6之?dāng)?shù)據(jù)解構(gòu)的用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • JavaScript中常用數(shù)據(jù)處理函數(shù)groupBy的用法詳解

    JavaScript中常用數(shù)據(jù)處理函數(shù)groupBy的用法詳解

    數(shù)據(jù)處理與分析中,對數(shù)據(jù)進行分組是非常常見的功能,不論是實際工作中,還是在面試的場景中應(yīng)用十分廣泛,尤其在函數(shù)式編程中?groupBy?十分常見,下面我們就來學(xué)習(xí)一下groupBy的用法吧
    2023-12-12
  • js獲取input標(biāo)簽的輸入值實現(xiàn)代碼

    js獲取input標(biāo)簽的輸入值實現(xiàn)代碼

    input標(biāo)簽的輸入值通過js進行獲取,部分標(biāo)簽和類是封裝在框架內(nèi)的,其效果和html標(biāo)簽差不多,具體實現(xiàn)如下,感興趣的朋友可以參考下,希望對大家有所幫助
    2013-08-08
  • JS創(chuàng)建優(yōu)美的頁面滑動塊效果 - Glider.js

    JS創(chuàng)建優(yōu)美的頁面滑動塊效果 - Glider.js

    JS創(chuàng)建優(yōu)美的頁面滑動塊效果 - Glider.js...
    2007-09-09
  • JavaScript異步編程之Promise的初步使用詳解

    JavaScript異步編程之Promise的初步使用詳解

    這篇文章主要介紹了JavaScript異步編程之Promise的初步使用,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 微信小程序模板和模塊化用法實例分析

    微信小程序模板和模塊化用法實例分析

    這篇文章主要介紹了微信小程序模板和模塊化用法,結(jié)合實例形式分析了微信小程序中的模板與模塊化概念與簡單使用技巧,需要的朋友可以參考下
    2017-11-11
  • JS實現(xiàn)CheckBox復(fù)選框全選全不選功能

    JS實現(xiàn)CheckBox復(fù)選框全選全不選功能

    在網(wǎng)站的管理后臺應(yīng)用此功能居多,如一次性處理多個產(chǎn)品,或?qū)ξ恼碌膭h除對產(chǎn)品的下架等處理,一條一條的點顯然有一些麻煩,如果能每一行放一個checkbox,然后統(tǒng)一處理就好辦的多了,今天我就用簡單的篇幅來講解一下這個功能的實現(xiàn)原理和實現(xiàn)過程。
    2015-05-05
  • JS中對象與字符串的互相轉(zhuǎn)換詳解

    JS中對象與字符串的互相轉(zhuǎn)換詳解

    下面小編就為大家?guī)硪黄狫S中對象與字符串的互相轉(zhuǎn)換詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • 修復(fù)ie8&chrome下window的resize事件多次執(zhí)行

    修復(fù)ie8&chrome下window的resize事件多次執(zhí)行

    window.onresize 事件 專用事件綁定器 v0.1,用于解決 lte ie8 & chrome 及其他可能會出現(xiàn)的 原生 window.resize 事件多次執(zhí)行的 BUG.
    2011-10-10

最新評論