山海鲸创造了一种CS和BS热切换的编辑模式,即CSaaS架构,可以在安装软件之后一键从软件的CS状态切换为一个BS服务器,让私有化部署变得十分轻松。具体效果可以参照下面的视频:

https://www.bilibili.com/video/BV1NP411Z7zS/

可以看到,在视频中我们先在软件中进行了编辑,随后切换到web中依然可以在几乎完全相同的体验下进行编辑。

虽然山海鲸的CS和BS热切换非常强大和方便,但我理解这并未触及到这个问题的本质,这个问题的核心应该不仅仅是BS和CS,下面我分个层次再深入地聊一下这个话题。

第一个层次:纯粹BS和CS的区别。这就不得不聊到为什么山海鲸会做CSaaS了。首先,CS本身的优势是下载和部署简单,一个安装包就能解决所有问题。但软件安装之后,只有一台电脑能使用,如需要在其他电脑使用则需要各自再装一个软件,且CS在协同编辑上也不方便。而山海鲸很多客户是政企客户,如若领导要查看某项数据就需要装一个软件的话,那估计领导电脑就爆了。因此山海鲸结合两者的特点,不仅能一键切换,还能热切换甚至同时在BS和CS上操作(目前因为定价原因做了限制)。底层我们自己实现了一套框架(我们称之为VenJS,即Vue+Electron+Nestjs),让一套代码同时跑在软件中或者浏览器和服务器上,同时,我们做了一个协议的中间件,封装了http协议和进程间通信。基于VenJS写代码时候无需关心底层通信协议,协议的接口直接暴露在axios接口中。写代码的时候完全当作网站来写,由框架来把程序打包到软件当中。同一套代码,VenJS既可以打包成纯软件,也可以打包成纯网站,也可以打包出混血儿(就是现在山海鲸软件主版本采用的模式)具体代码细节以后有机会开一个专栏写一下,我们也有考虑后续框架成熟后可能会开源出来运营。

第二个层次关于游戏引擎和WebGL实际上这两个完全不是一个层面的东西,所以我们可以拆成两个部分来看。我们先聊聊工具链完善的PC端游戏引擎VS一般只有一个框架代码的Web端3D引擎。无论是从视觉还是开发便利性来看,ue或者unity这类游戏引擎完胜,不管是体积云天空、体积雾、水效这类复杂的视觉元素,或者地形编辑、材质节点等等这类辅助工具都会比Web上的引擎高一个层级,非要用Webgl框架,那美术得砍死你。如果只是做一些简单的Demo,那Web端引擎只剩一个优势,就是对于Web前端开发者来说上手简单。当然PC端引擎最终能不能跑在Web上也算一个问题,这个问题我们在第三个层次再探讨,这里我们单纯对比框架本身。但如果要做大型项目,特别是数字孪生项目,就是各有优势了,因为这类项目对数据集成和一些2D图表的整合要求很高,这个时候PC上的游戏引擎用起来就不太顺手了,毕竟他们是游戏引擎,对于通信这类整合和Web前端框架相比就略显难用(当然也取决于开发者对不同语言的熟悉程度)。再进一步来说,如果像是我们山海鲸本身自己要做数字孪生引擎,自己要来提供数字孪生工具链的话,那就远不如开源的前端框架好用了。我们需要大量整合的底层接口,需要定制魔改的渲染管线,几乎都等于再写一个引擎的工作量了,所以选开源的来改方便太多。

第三个层次关于D3D和WebGL或者说将来关于Vulkan和WebGPU这个问题首先有一个前提,那就是这个项目是否需要跑在Web上,如果需要,那就没有对比的必要了。因为只要想跑在Web上,目前就只能用WebGL,Web端应用Unity最终的也得编译到WebGL上运行,UE在官方版本中甚至直接取消了对于WebGL的编译,要自己去编译UE的社区版或者用ue的Pixel Streaming,当然这就完全是另一回事了。单纯对比性能来说,WebGL肯定是完全没法比的。如果项目不用跑在Web上,那其实这个问题就变成了应该选OpenGL还是D3D了,这个问题其实看看各大游戏引擎的选择就可见一斑了。回到我们山海鲸本身,目前虽然我们实现了一键热切BS/CS,但是渲染依然基于WebGL来做,下一步我们希望整合D3D的渲染能力,让CS状态下在D3D中渲染。当然这中间牵扯的Shader转换、Windows句柄和Chromium的整合,哪个都不是简单的问题,只能说任重而道远啊。

综上所述,选择何种数字孪生技术路线更多要取决于最终的项目特点和公司自身的技术栈,以及项目中对于引擎的定制开发程度。

C/S架构和B/S架构两种数字孪生技术路线的区别是什么?的更多相关文章

  1. Java单体应用 - 架构模式 - 01.三层架构

    原文地址:http://www.work100.net/training/monolithic-architecture-3level.html 更多教程:光束云 - 免费课程 三层架构 序号 文内章 ...

  2. 华为 1.static有什么用途?(请至少说明两种)

    1.static有什么用途?(请至少说明两种) 1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变. 2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问 ...

  3. JSP中两种模式的总结

    运用JSP/Servlet实现的Web动态交互,主要采用: 模式一:JSP+JavaBean 链接:http://wxmimperio.coding.io/?p=155 模式二;JSP+Servlet ...

  4. Netty源码之解码中两种数据积累器(Cumulator)的区别

    上一篇随笔中已经介绍了解码核心工作流程,里面有个数据积累器的存在(Cumulator),其实解码中有两种Cumulator,那他们的区别是什么呢? 还是先打开ByteToMessageDecoder的 ...

  5. iOS中的两种主要架构及其优缺点浅析

    凡是程序的开发者,应该对程序的架构都不陌生.一个程序的架构的好坏对这个程序有着非常重要的作用.今天我们来看一下iOS开发中用要的两种主流的程序架构.这个过程中我们主要以例子的形式展开. 我们来看第一种 ...

  6. 你知道C/S和B/S两种架构有什么区别吗?

    C/S和B/S,是再普通不过的两种软件架构方式,都可以进行同样的业务处理,甚至也可以用相同的方式实现共同的逻辑.既然如此,为何还要区分彼此呢?那我们就来看看二者的区别和联系. 一.C/S 架构     ...

  7. thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。

    thinkphp 的两种建构模式  第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...

  8. B/S 和 C/S两种架构

    一: 什么是B/S(Browser/Server)架构? 应用系统完全放在应用服务器上, 并通过应用服务器同数据库服务器进行通信,系统界面 是通过浏览器来展现的. T是浏览器模式. 优点: 1)客户端 ...

  9. 基于两种架构的ETL实现及ETL工具选型策略

    企业信息化建设过程中,业务系统各自为政.相互独立造成的"数据孤岛"现象尤为普遍,业务不集成.流程不互通.数据不共享--.这给企业进行数据的分析利用.报表开发等带来了巨大困难.在此情 ...

  10. C/S和B/S两种架构区别与优缺点分析

    C/S和B/S,是再普通不过的两种软件架构方式,都可以进行同样的业务处理,甚至也可以用相同的方式实现共同的逻辑.既然如此,为何还要区分彼此呢?那我们就来看看二者的区别和联系. 一.C/S 架构 1. ...

随机推荐

  1. 位运算符n&(n-1)详解与妙用

    用处一:求一个int类型数是否为2的幂 1.当n=4时,二进制为:0100 n-1=3,二进制为:0011 则:n&(n-1)==0  解释(将0100最右边的1变为0 则 0000=0) 2 ...

  2. vue之数组与对象的检测与更新

    目录 说明 语法 示例 说明 MVVM会自动检测变量的变化,当变量改变,页面也会对应的变化,但是有一点需要注意,如果有一个对象增加值的时候,不能直接修改,需要使用Vue.set()方法 语法 Vue. ...

  3. pysimplegui之系统托盘图标创建

    在 PySimpleGUI(tkinter 版本)上运行时,系统托盘图标为 PNG 和 GIF 格式.PNG.GIF 和 ICO 格式适用于 Wx 和 Qt 端口. 指定"图标"时 ...

  4. [Linux]Linux执行sh脚本时,出现$‘\r‘: command not found(未找到命令)"错误的解决方案[转载]

    1 文由 为什么要把这么一个看似很简单的问题,还要以[转载]的方式专门用博客写出来? 主要是在编写crontab的自动化定时脚本的过程中,发现是这个错导致的自动化脚本频繁执行异常时,已经花了好几个小时 ...

  5. 【Diary】CSP-S2 2021 游记 & NOIP 备赛发疯日记

    Day 0 两个极端的回跳. .....不行啊. 我快输不起了........... ------------------------------- 早上被生物钟强行唤醒,逼自己懒床到6:40. 弹琴 ...

  6. 定时器中断_PWM输出_STM32第三课

    1.TIM2中断,需求:实现LED间隔0.5秒闪烁 1.使用CubeMX设置系统时钟.RCC.LED灯.时钟树等基础操作. 2.配置TIMER2,使能为全局变量,设置优先级.并生成代码. 3.代码编写 ...

  7. RDIFramework.NET开发框架WinForm版新增编码管理

    1.概述 编码管理是企业管理和信息化建设过程中一个至关重要的环节.各信息化系统是通过编码来标识业务对象的,统一的编码方案可以作为各系统的通话语言,也可以为信息化系统的集成提供便利.建设数据编码的基本原 ...

  8. Python tkinter 进度条代码

    1 import tkinter as tk 2 import time 3 4 # 创建主窗口 5 window = tk.Tk() 6 window.title('进度条') 7 window.g ...

  9. 归并排序c++(逆序对)

    归并排序c++(逆序对) 目录 题目链接 思路 算法 分离数组 合并 代码 目录 归并排序(Merge Sort)是建立在归并操作上的一种既有效又稳定的排序算法,该算法是采用分治法(Divide an ...

  10. Java实现平衡二叉搜索树(AVL树)

    上一篇实现了二叉搜索树,本章对二叉搜索树进行改造使之成为平衡二叉搜索树(Balanced Binary Search Tree). 不平衡的二叉搜索树在极端情况下很容易退变成链表,与新增/删除/查找时 ...