资讯专栏INFORMATION COLUMN

基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)

oujie / 1220人阅读

摘要:今天没有延续上一篇讲的内容,穿插一段小插曲,实时数据通讯同步的问题,今天我们并不是很纯粹地讲相关知识,我们通过拓扑图来呈现一个有趣的。接下来我们就看看这个实时数据通讯是一个什么样的套路。

今天没有延续上一篇讲的内容,穿插一段小插曲,WebSocket 实时数据通讯同步的问题,今天我们并不是很纯粹地讲 WebSocket 相关知识,我们通过 WebGL 3D 拓扑图来呈现一个有趣的 Demo。接下来我们就看看这个实时数据通讯是一个什么样的套路。

我们先来聊聊这次 Demo 的思路吧,首先我要有一个 3D 的拓扑图组件,在上面创建几个节点,然后通过拉力布局(ForceLayout)将这些节点自动布局,但是有一定,需要在不同的网页窗口下,对应节点的位置是一样的,简单地说就是不同网页窗口所呈现的节点布局是一样,而且拖动不同网页窗口中的任意的节点,都将更新所有页面窗口,让所有窗口的呈现都是一样的。

根据上面的思路,我们该如何去规划呢?既然需要实时数据通讯,那么就需要使用 WebSocket,WebSocket 又是什么呢?WebSocket 是 HTML5 一种新的协议,它没有标准的 API,各个实现都有自己的一套 API,在这里我们就不去详细研究 WebSocket 的具体实现,我也讲不了,至少现在讲不了。

在这里我们用比较易上手的 Node.js 的 Socket.IO 做通讯框架,Socket.IO 让长连接通讯变得无比简单,服务器再也不用等待客户端的请求就可以直接给客户端发送消息,根据这样的特性就可以实现数据通讯同步的问题。

我们来写一个最简单的例子,将任何一个客户端发送到服务器的消息,原封不动的转发到所有连接到服务器的客户端,我们来看看要实现这样的一个功能,服务端要怎么设计。

首先我们得搭建一个简易的 web 服务器。

var app = require("express")();
var http = require("http").Server(app);

app.get("/", function(req, res) {
    res.end("

Hello Message!

"); }); http.listen(4000, function() { console.log("listening on *:4000"); });

以上的代码的 Node.js 的代码,将这串代码贴到一个 js 文件中,比如命名为 server.js 然后在 Terminal 中 cd 到 server.js 对应的文件夹下,如果 node server.js 后回车,如果发现报了 Cannot find module ‘xxx’ 的字样,那么说明你在当前目录下没有安装程序用到的相关包。那么我们在当前目录下创建一个叫 package.json 的文件,然后把下面的程序拷贝到该文件中,然后在 Terminal 中输入 npm install,等安装完后,就可以正常启动服务器了。

{
  "name": "socket-example",
  "version": "0.0.1",
  "description": "my first socket.io app",
  "dependencies": {
    "express": "^4.10.2",
    "socket.io": "^1.4.8"
  }
}

启动后,你在浏览器上输入 localhost:4000 就可以看到 Hello Message! 的字样。这是最简单的 HTTP 服务器,那么我们如何在上面加上 WebSocket 的功能呢呢?眼尖的同学可能已经发现上面的 package.json 的内容已经包含了 Socket.IO,那么 Socket.IO 要怎么用呢,怎么样才能达到实时数据通讯的效果呢?

var io = require("socket.io")(http);
io.on("connection", function(socket) {
    console.log("a user connected");
    socket.on("disconnect", function() {
        console.log("user disconnected");
    });

    socket.on("message", function(msg) {
        io.emit("message", msg);
    });
});

在 server.js 中加入上面那串代码,就可以实现客户端之间的实时数据通讯问题。但是在浏览器输入 localhost:4000 你看到的是 Hello Message! 的字样,要怎样才能访问到具体的 html 网页内容呢?这个时候就需要稍微修改下我们的服务器了。

app.get("/", function(req, res) {
    res.sendFile(__dirname + "/index.html");
});

也就是将前面提到的 res.end("

Hello Message!

’); 代码换成 res.sendFile(__dirname + ‘/index.html"); 做个页面跳转,从而达到访问具体 html 网页的目的,在这边是是为了满足 Demo 而做的方案,要搭建一个真正的 http 静态服务器肯定不是这样子的,搭建 http 静态服务器我在这边就不介入研究了,大家刚兴趣的话,可以自己到网上搜索学习。

那么客户端该如何实现来展现服务端的实时通讯呢?



    
        
        Socket.IO Message
        
        
        
    
    
        Message: 
        

    以上代码就可以做到数据同步了,具体我来解释下。

    页面很简单,有一个 input 文本框,和一个 Send 按钮,还有一个 ul 无序列表用来显示用户发送的内容,当用户在 input 文本框中输入内容后,按下 enter 键或者点击 Send 按钮都会想服务器发送文本框中填入的内容,并且服务器会将这条消息原封不动地推送到所有的客户端中,在客户端接收到消息后,就会想 ul 无序列表中填入消息。

    这个 Demo 在 http://socket.io/get-started/... 这上面比我讲得清楚,大家可以到上面详细阅读,会理解得更全面一点。

    由于篇幅的问题,我今天就介绍到这了,下一篇,我们将重点介绍前面说到的结合 HT for Web 的 3D 拓扑图组件来展现实时数据通讯的效果,让每个客户端都同步操作,效果图如上。

    文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

    转载请注明本文地址:https://www.ucloud.cn/yun/60891.html

    相关文章

    • 基于 WebSocket 实现 WebGL 3D 扑图实时数据通讯同步(二)

      摘要:接下来我们来看看客户端的实现吧代码并不长,我来介绍下具体的实现。那么实时数据通讯系列到这里就介绍完了,如有什么问题,欢迎批评指正。 我们上一篇《基于 WebSocket 实现 WebGL 3D 拓扑图实时数据通讯同步(一)》主要讲解了如何搭建一个实时数据通讯服务器,客户端与服务端是如何通讯的,相信通过上一篇的讲解,再配合上数据库的数据储存,我们就可以实现一个简易版的 Web 聊天工具了...

      ad6623 评论0 收藏0
    • SegmentFault 技术周刊 Vol.35 - WebGL:打开网页看大片

      摘要:在文末,我会附上一个可加载的模型方便学习中文艺术字渲染用原生可以很容易地绘制文字,但是原生提供的文字效果美化功能十分有限。 showImg(https://segmentfault.com/img/bVWYnb?w=900&h=385); WebGL 可以说是 HTML5 技术生态链中最为令人振奋的标准之一,它把 Web 带入了 3D 的时代。 初识 WebGL 先通过几个使用 Web...

      objc94 评论0 收藏0
    • HTML5 技术在风电、光伏等新能源领域的应用

      摘要:随着新一轮工业革命兴起,应对气候变化日益成为全球共识,能源技术正在成为引领能源产业变革实现创新驱动发展的源动力。 随着新一轮工业革命兴起,应对气候变化日益成为全球共识,能源技术正在成为引领能源产业变革、实现创新驱动发展的源动力。从全球到中国,以风能、光伏发电为代表的新能源产业发展迅速,可再生能源发电与现代电网的融合成为了世界能源可持续转型的核心,发电技术继续沿着大规模、高效率和低成本方...

      mudiyouyou 评论0 收藏0
    • 数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D

      摘要:数百个例子学习图形组件拓扑图篇一文让读者了解了的拓扑图组件使用,本文将对的功能做个综合性的介绍,以便初学者可快速上手使用构建例如电信网管机房应用水务燃气监控应用及智能楼宇等应用场景。 《数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇》一文让读者了解了 HT 的 2D 拓扑图组件使用,本文将对 HT 的 3D 功能做个综合性的介绍,以便初学者可快速上手使用 HT 构建例如电信...

      OldPanda 评论0 收藏0
    • 基于HTML5实现的Heatmap热图3D应用

      摘要:热图通过众多数据点信息,汇聚成直观可视化颜色效果,热图已广泛被应用于气象预报医疗成像机房温度监控等行业,甚至应用于竞技体育领域的数据分析。 Heatmap热图通过众多数据点信息,汇聚成直观可视化颜色效果,热图已广泛被应用于气象预报、医疗成像、机房温度监控等行业,甚至应用于竞技体育领域的数据分析。 showImg(http://segmentfault.com/img/bVcXhb);...

      sunsmell 评论0 收藏0

    发表评论

    0条评论

    最新活动
    阅读需要支付1元查看
    <