前言
本项目旨在开发一个展厅3D
展示系统,主要功能为监控大屏与3D
城市沙盘显示。项目涉及两台电脑屏幕,分别标记为A
和B
。A
屏幕用于展示3D
城市沙盘,用户点击沙盘中的特定区域时,B
屏幕将显示与该区域相关的效果视频。因此,项目的核心在于如何构建3D
城市沙盘以及实现两台电脑之间的通信功能。
解决方案
最初计划使用Three.js
来开发3D
城市沙盘,并通过Electron
开发两个独立的应用程序,分别部署在A
和B
电脑上以实现通信功能。然而,在项目推进过程中,我们发现3D
城市沙盘可以通过视频形式实现,仅需由UI
设计团队制作一个3D
城市沙盘视频即可。对于沙盘大屏的左右旋转功能,可以通过捕获手势事件来控制视频播放器的快进和后退操作,从而避免了使用Three.js
开发3D
沙盘的复杂工作。
电脑间通信验证
基于electron-vite-vue
和ws
框架,我们开发了两个应用程序:客户端和服务端。客户端部署在主屏(A
电脑),服务端部署在副屏(B
电脑)。当系统启动时,服务端将在本地创建一个WebSocket
服务器,监听8080
端口。客户端则创建一个WebSocket
客户端实例,连接至该服务器,从而实现两台电脑之间的通信功能。
假设B
电脑的IP
地址为192.168.28.112
,我们首先在B
电脑上创建一个WebSocket
服务器,监听8080
端口:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('something');
ws.on('close', function clear() {
console.log('client disconnected');
});
});
接下来,在A
电脑上创建一个新的WebSocket
客户端实例,连接到B
电脑的WebSocket
服务器,用于发送消息:
const WebSocket = require('ws');
// 本地调试
// const ws = new WebSocket('ws://localhost:8080');
// 连接`B`电脑的 `WebSocket` 服务器
const ws = new WebSocket('ws://192.168.28.112:8080');
ws.on('open', function open() {
console.log('connected');
setInterval(() => {
ws.send('Hello Server!' + Math.random());
}, 3000)
});
ws.on('message', function incoming(data) {
console.log(data);
});
ws.on('close', function clear() {
console.log('disconnected');
});
ws.on('error', function error(err) {
console.error('WebSocket Error: ', err);
});
通过上述实现,A
和B
电脑之间的通信效果如下: