当前位置: 首页 > Web前端 > CSS

从零开始学习3D可视化数据对接(二)

时间:2023-03-30 22:15:13 CSS

在日常的互联网产品使用中,很多都是靠前后端数据的交互来完成的。说到数据交互,就不得不提Ajax和WebSocket。它们是数据交互工具,那么它们是什么呢?Ajax在之前的文章中已经讲过了,那么什么是WebSocket呢?WebSocket是HTML5中的一种新协议,实现了浏览器和服务器之间的全双工通信。为了建立WebSocket连接,客户端浏览器首先要向服务器端发起HTTP请求。这个请求不同于通常的HTTP请求,附加的头信息“Upgrade:WebSocket”表明这是一个协议升级的HTTP请求。服务器端解析这些附加的头信息,生成响应信息返回给客户端。客户端和服务端之间的WebSocket连接建立起来,双方就可以通过这个连接通道自由传输信息,这个连接会一直存在,直到客户端或者服务端的其中一个对端主动关闭这个连接。它的本质是通过HTTP/HTTPS协议在握手后创建一个TCP连接用于交换数据。服务端和客户端通过这个TCP连接进行双向的实时数据传输,直到一方主动发出关闭连接的请求或者出现网络错误时,连接才会被关闭。这里以ThingJS中WebSocket数据对接为例,点击【打开读取】读取数据,读取到的数据会显示在数据详情面板中,当温度值大于20℃时,车辆会设置红色效果,点击【关闭阅读】停止数据阅读。变种应用程序;//应用程序对象vartimer;//计时器变量webSocket;//导入样式文件THING.Utils.dynamicLoad(['/guide/examples/css/measure/panel.css'],function(){app=newTHING.App({url:'https://www.thingjs.com/static/models/storehouse'});app.on('load',function(){//设置相机位置和目标点app.camera.position=[44.38316010361372,22.256383671664036,37.42310488848945];app.camera.target=[19.488379488180318,0.17527928595920675,5.827049588512047];varcar=app.query('car01')[0];//物体上创建monitorData对图像使用'car.monitor'Data={'Temperature;newTHING.widget.Button('打开阅读',function(){updateData(car);});newTHING.widget.Button('关闭阅读',function(){stopUpdate();});createHtml();initThingJsTip("WebSocket实现了数据的实时双向通信,并且通信不受同源策略限制,不存在跨域问题。
点击【打开阅读】可以读取数据,读取到的数据会显示在数据详情面板中。当温度值大于20℃时,车辆会设置红色效果,点击【关闭读数】停止数据读取!");})})//创建html界面functioncreateHtml(){//数据详情界面letdataDetails=`

数据详情
没有数据
`;$('#div2d').append(dataDetails);//点击按钮关闭面板$('#dataDetails.tj-close').on('click',function(){$('#dataDetails').css('display','none');});}/***数据对接*/functionupdateData(obj){//连接到自己的websoketserverif(!webSocket){//如果ThingJS网站是https,则对应wss//如果ThingJS网站是http,则对应wswebSocket=newWebSocket('wss://3dmmd.cn/wss');//建立websocket连接成功并触发事件webSocket.onopen=function(){console.log("Websoket服务器连接成功...");};//从服务器接收数据时触发事件webSocket.onmessage=function(evt){vardata=evt.data;现在日期时间();如果(($('.empty').length)){$('.empty').remove();}if(!($('.tj-group').length)){lettbody=``;$('.tj-table').prepend(tbody);}让tr=``+dateString+``+data+`℃`;$('.tj-group').prepend(tr);//在对象上设置监控数据obj.setAttribute("monitorData/temperature",data);改变颜色(对象);};webSocket.onclose=function(evt){console.log("websoket关闭...");网络套接字=空;}}}/***关闭数据请求*/functionstopUpdate(){//关闭连接webSocket.close();}/***获取系统日期*/functionnowDatetime(){var日期=新日期();varhours=(date.getHours())>9?(date.getHours()):"0"+(date.getHours());varminutes=(date.getMinutes())>9?(date.getMinutes()):"0"+(date.getMinutes());varseconds=(date.getSeconds())>9?(date.getSeconds()):"0"+(date.getSeconds());dateString=小时+":"+分钟+":"+秒;returndateString;}/***当车辆温度超过20时,改变汽车颜色*/functionchangeColor(obj){varvalue=obj.getAttribute("monitorData/temperature");如果(值>20){obj.style.color='rgb(255,0,0)';}else{obj.style.color=null;}}总结WebSocket最大的优点就是服务端可以主动向客户端推送信息,客户端也可以主动向服务端发送信息,真正实现了数据的实时双向通信,WebSocket通信不是受同源策略限制,不存在跨域问题。————————————————————数字孪生可视化:https://www.thingjs.com/

最新推荐
猜你喜欢