项目开发完了,发现部署上的问题逻辑走不通,求大佬指点一下优化方案?

306 天前
 lalalaXxx

环境

后端:springboot JDK8
前端: vue

需求

业务需求是,服务端对接一些硬件设备,体重秤 血压计等... 使用的是串口协议,通过 DB9 转 USB 直接插到电脑上,服务端使用 java 开发的串口协议(rxtx),然后用 Vue 写的客户端去调接口,来操作这些硬件设备;

问题

现在项目所有都已经开发完成了,需要去部署了,才发现一个问题,如果项目部署到云服务器上,客户那边一台电脑 A 所有硬件设备通过 USB 连接电脑 A ,通过浏览器访问的云服务器的页面,这样的话,是不能直接操作硬件设备的;

方案

现在有两种方案
1.从新用 C# c++等语言,从新开发一个 exe 程序,客户拿到程序 安装完成后,每次打开电脑只需要打开应用程序即可操作硬件 (代价太大 需要从新开发,ui 和一些功能)
2.把 java 项目和 Vue 项目打包,去现场把项目装到连接到硬件设备的电脑上,实现操作。
	2.1 问题 1 客户电脑每天关机,从新开机后,还需要重启 java 项目 Nginx 等一些列的操作,就算提供一个 Bat 脚本,依然很复杂,而且客户电脑是 windows 的系统
    2.2 问题 2 客户电脑配置不高,如果运行 jar 和 Vue ,还要装 jdk node nginx 等.... 怕客户那边电脑本来就卡,装完这些 更卡

优化

不知道大佬们有没有遇到过类似的场景,怎么能优化一下;

我的一些想法,把 jdk node nginx 这些环境的东西,都在服务器配置好,然后 Java 项目在客户本地运行,然后如果电脑是从新开机, 通过浏览器页面,如果 java 项目没有启动,在浏览器上让客户点击一个按钮,使用 js 来运行 cmd 命令来启动 java 项目,不知道能不能实现到这个想法;

想法 2: 能不能把 java 项目和 vue 项目,打包成类似 C#或者 c++ 这样的 exe 应用程序,客户那边安装完成后,里面是自带 jdk node 这些环境,安装一次后,下次就是正常启动就可以了,研究了以下 electron 好像做不到这个程度吧,环境还是需要在本地配置好,只是把 web 页面打成了 exe

不知道大佬们有没有什么建议
5909 次点击
所在节点    程序员
47 条回复
ysc3839
306 天前
“客户那边一台电脑 A 所有硬件设备通过 USB 连接电脑 A ,通过浏览器访问的云服务器的页面,这样的话,是不能直接操作硬件设备的”
否的,USB 有 WebUSB ,串口有 WebSerial 。实在不行就套一层 Electron 把访问硬件的接口暴露给前端。
cowcomic
306 天前
额,首先要确认你这个服务端是只为一台接入端点服务还是面向多台接入端点,其次确认项目后续的维护阶段的投入预算大概是多少
多端点或高维护预算:1 楼方案
单端点+低维护预算:改为本地部署,不要用云服务器,做好开机启动,没必要打包,JAVA 、Nginx 之类的环境都是可以直接拷贝使用的,直接做成脚本启动就行
vircs
305 天前
最佳方案:你们自己买一台 supermicro 低功耗服务器,放在客户那里,客户任何问题不需要上门,通过路由器 vpn 监控服务状态,修复你在测试过程中未发现的问题;这样做客户体验好,这类产品云端容易出现问题 修复成本高,客户体验差
simo
305 天前
如果非要云端部署,那就把 java 端拆成接口转发客户端 和 业务两个,业务部署到服务器。需要增加的就是客户端和服务端通信设计。
服务器端能监测到所有节点的状态,异常的,人为处理。如果是自己的实施人员驻场,这个样省事儿
GameAuto
305 天前
东西开发完了才来解决这类型的问题,属实有点难办。最简单的方法是搞一个 agent 代理吧,agent 把收集到的请求发送到你们云服务器上。这样改动是最小的,部署完后把 agent 发到客户的电脑上让装一遍。agent 也用 java ,打包成 exe 。或者 python 最方便。
niubee1
305 天前
串口协议 表示你必须在连接串口设备的机器上部署本地的程序才行,可以用 C#写一个带界面的,也可以用别的语言写无头的服务程序,启动一个 httpserver 和 web 页面交互。可以用 go 也可以用 rust 写,C ,C++也是可以的,但是 java 的话你得用最新版本用 graalvm native 编译,python 在 windows 下可以用 py2exe ,直接用 electron 也行,用 tauri 也行。其实一开始实现的时候就该想好了
imnpc
305 天前
目的是读取 USB 设备吧,建议看下 VirtualHere 服务器和客户机都要安装,需要授权
joyoyao
305 天前
买个小型机器,j1900 cpu 就行,几百块钱,24 小时待机。部署一个 agent 读取 usb 信息, 通过 mqtt 协议传到云服务器。
CLMan
305 天前
Vue 项目用 electron,wails,tauri 等 web ui 解决方案打包成桌面端程序。

java 项目有技术就用 graalvm 编译成 exe ,没技术可以安装 JRE/JDK ,或者绿色版 JRE/JDK 。

Nginx 是什么鬼,本地部署哪里需要 Nginx 。

这其实就是 shadowsocks,clash for windows,clash verge 之类翻墙软件用的解决方案,去看看它们的源码就懂了。

唯一麻烦点就是 java 程序需要虚拟机,比纯 exe 麻烦点,但你想想,IDEA 还不是照样自带了个虚拟机。
------
归根到底,你这项目最佳的部署方案就是桌面端 GUI 程序。
kongwenyan
305 天前
vue 网页 serial api 已经支持很多浏览器了。前端改一下加入 serialport 和服务器连接。我有一个页面 serial api 的 demo 的供参考 https://kongdayan.github.io/Web-Serial-API-demo/
kaiveyoung
305 天前
方案是,弄一个低功耗低成本边缘网关来接硬件,你就几个串口,一百多块钱的设备就能用,有串口,网口,4g/WiFi 。然后你程序只用和边缘网关交互就行
lalalaXxx
305 天前
@kongwenyan 感谢
lalalaXxx
305 天前
@kongwenyan 有源码吗~
Felix96
304 天前
最近我有写网页读取串口的的项目,用的是 Web Serial API ,原生浏览器环境 JS 解决,不过 Chrome90 后都支持,最差也需要 windows7 ,兼容性还是很好的,可以放在 NW.s 里作为一个程序运行,看 MDN 真的用处不大,我参考的是
1. https://wicg.github.io/serial/
2. https://github.com/itldg/web-serial-debug
3. https://github.com/Curtion/Web-SerialPort
优先级 1>2>3 ,简化了 2 的代码,大概一个下午就搞定。
如果只需要简单的串口读取,可以找我要简化后的代码
buyerhou
304 天前
占楼,同样的处境,笨方法,就是分开部署,客户电脑部署一套,服务器部署一套。
caiqichang
304 天前
litchinn
304 天前
1. vue 项目是可以直接打包进 springboot 包里的,这样直接启动 springboot 就能访问页面,就和前后端不分离是一样的。再配合 graalvm native image 打包成原生镜像可以直接启动。
但是你项目引入的第三方包 graalvm native image 打包也许会有坑,也可以选择 exe4j 等工具打包 exe 直接启动。
2. 不用 java ,纯 js 应该也可以串口通讯。直接 electron 打包。这个我了解不多
bianhui
304 天前
写个 agent ,用户安装,把原来 java 调用本地硬件地方替换成 agent 通讯。
laaaaaa
304 天前
@Felix96 Web Serial API 能实现同时连上多个串口吗? 我用 API 试了一下,他好像需要 navigator.serial.requestPort(); 让用户选择连哪个串口; 不能直接通过串口名连接吧
laaaaaa
304 天前
@kongwenyan 不支持同时连多个吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1018119

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX