nodejs调取exe执行文件连接websocket

news2024/11/26 12:18:08

最近有个需求,就是需要前端调取一个封装成exe文件的websoket服务。

很显然,在浏览器的框架下,根本不可能完成这个事情。以为浏览器的沙盒机制和安全策略,是不允许读取本地文件的。

所以,我们需要nodejs的帮助。

那么,既要继承nodejs环境,同时又不偏离前端开发的范畴。我最终决定使用eletron来封装我的浏览器应用。

如果,还不知道如何使用electron封装前端应用的请参考我的其他文章或者百度bing搜索一下:

vuecli4 electron13.3.0 创建客户端应用以及安装、打包时候遇到的问题_win.loadurl('app://./index.html')_屋昂仼的博客-CSDN博客

vue electron node koa 实现桌面应用_electron+vue+node_屋昂仼的博客-CSDN博客

electron内部继承了浏览器和node环境,这使得我们可以在一个框架下同时在开发前端界面交互js)和nodejs(server)服务端功能。

现在读取本地文件的功能难题已经解决了。

我们现在需要一个封装为exe的websocket服务文件来测试一下。

对其他语言不熟悉,我采用python来写websocket服务。

1.使用python编写服务代码,并生成exe文件

注意:你可以使用任意你熟悉的后端语言去写websocket服务。我使用python,基于以下两点:

1. python 我相对熟悉一些,而且使用极其方便;

2.利用python可以直接将服务打包为exe文件,十分便捷!

如果你也想要用python,那么百度安装配置python环境。因为这是前置条件

一、首先安装对应模块。

# python 安装websockets 模块
# 打开cmd

pip install websockets


# 然后确认有没有安装成功 

pip list 

# 可以查看当前安装的模块

二、编写socket服务代码

编写python文件 - websocket.py, 代码如下:

# websocket.py

import asyncio
import websockets


async def echo(websocket, path):
    # fetch msg
    async for message in websocket:
        print("got a message:{}".format(message))
        await websocket.send(message)


async def main():
    # start a websocket server
    # 开启socket服务 地址为 ws://localhost:8765
    async with websockets.serve(echo, "localhost", 8765):
        await asyncio.Future()  # run forever

asyncio.run(main())

三、生成exe文件

因为我们的终极目标是通过node执行一个exe文件,然后连接webocket服务。

使用python打包py文件,首先需要安装三方依赖 pyinstaller。

首先全局安装:

# 打开cmd

pip install pyinstaller

# 查看是否安装成功

pip list 

# 可以看到安装的所有依赖

然后进入py文件所在的文件夹,cmd进入,执行如下命令:

# 进入写有websocket.py的文件夹内 执行一下命令

pyinstaller --onefile websocket.py

执行成功之后,最终会出现 successful 字样。

然后在这个文件夹内会自动生成一个dist文件,dist内会有打包后的exe文件:

 

 如上所示,我们的exe文件就已经生成好了,python确实很好用,对不对?

四、使用nodejs执行这个exe文件,建立websocket服务

不废话了,新建一个server.js,代码如下:

// server.js

// 注意 一下代码是nodejs代码

// node开启子进程
const cp = require('child_process');

// 然后执行我们刚生成的exe文件 看看能不能起来websocket服务  
// 注意地址要正确

let child = cp.spawn('D://Local_file/py/excersise/dist/websocket.exe')

打开cmd,执行 node server.js 。

五、测试是否可以连接成功

打开websocket测试工具(可网上自行下载,小巧方便),输入连接地址,开始测试;

 

如上,测试连接成功。 

六、如何获取electron客户端的安装地址

在background.js(electron配置js文件)中,可以写下如下代码:

// 以下代码是利用electron获取electron安装的位置

const { app } = electron;
let path = require('path');
let exePath = path.dirname(app.getPath('exe'));\

// exePath 就是 安装地址

 

为什么获取安装地址?

前边提到,我的需求就是需要读取并执行安装目录下的一个名字叫 websocket.exe 的文件。

获取地址了之后,我便可以通过上边的nodejs的方法执行这个exe文件。

总结:前端几乎不接触exe执行。所以刚开始有这个需求的时候,一脸茫然。我这个例子主要是使用了python和nodejs来帮助验证并解决了实际需求问题。

end~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/765503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

企业应如何做好软件供应链安全管理?

随着软件供应链攻击日益普遍,Gartner 将其列为2022 年的第二大威胁。Gartner 预测,到 2025 年,全球 45% 的组织将遭受一次或多次软件供应链攻击,是2021年的3倍。这些攻击一旦成功,将给企业带来毁灭性打击,因…

mmdet3d预处理(下)| train pipeline

mmdet3d预处理(下)—— train pipeline 文章目录 mmdet3d预处理(下)—— train pipeline基类 BaseTransformLoadPointsFromFileLoadAnnotations3D标签信息:源码 ObjectSample源码 ObjectNoise输入参数源码RandomFlip3D…

【FFNN负荷预测】基于人工神经网络的空压机负荷预测(Matlab代码实现)

📋📋📋本文目录如下:🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 算例1 2.2 算例2 2.3 算例3 🎉3 参考文献 🌈4 Matlab代码、数据、文章 &#x1f4a…

Ubuntu下搭建Vue开发环境,开发第一个程序并部署

Vue.js目前是前端技术比较火热的开发框架,是一个基于JavaScript的前端开发框架,它可以轻松地构建大型的单页面应用程序。因为项目需要在此记录一下Ubuntu下如何搭建Vue开发环境。 目录 1.nodejs npm安装 2.安装CNMP(非必要) …

Argo CD 入门扫盲使用

目录 一、什么是 argo cd 二、为什么使用 argo cd 三、argo cd 架构图 四、Argo CD 使用 1、安装 Argo CD 2、安装 Argo CD CLI 3、发布 Argo CD 服务 4、获取 Argo CD 密码 5、准备 Git 仓库 6、创建 Argo CD App 7、版本升级 8、版本回滚 一、什么是 argo cd A…

S_Tide使用总结(1)函数及数据

1、使用增强调和分析(EHA)计算实测潮位的调和常数,不考虑交点改正。 % s_tide.m - computes the tidal analysis of the real tidal % time series using Enhanced Harmonic Analysis (EHA) without nodal correcti…

Web 3.0时代,重塑教育与学习方式的可能性

随着科技的快速发展和互联网的普及,教育领域也面临着巨大的机遇和挑战。Web 3.0时代的到来为教育与学习方式带来了全新的可能性。在这个数字化时代,我们可以探索和利用Web 3.0技术,重塑教育的方式,提供更个性化、互动性和灵活性的…

数控机床编程与操作

一、数控机床 的产生 常见数控机床: 数控车床 数控铣床 加工中心 多轴数控机床 柔性制造单元 数控线切割机床 二、数控机床的发展历程 第一代 1952年-1959年 电 子管的硬件数控系统 第二代1959年-1965年 晶体管电路为主的硬件数控系统 第三代1965年开始 小、中规模集成电路…

HIVE SQL 根据主键去重并实现其余字段分组聚合

相同个人id下所有字段按时间顺序补位,取首个不为空值 --数据建表 drop table if exists db.tb_name; create table if not exists db.tb_name ( id string,name string,tele string,email string,date string ) ; insert overwrite table db.tb_name values (&qu…

Redis实战案例18-Redisson的锁重试和watchdog机制

1. 锁重试 首先要理解为什么要进行锁重试,之前我们在获取锁时,只要一次获取失败就直接返回false,这样的机制需要进行修改; 尝试获取锁的底层逻辑是 返回锁的有效期(null或者其他值); 为null然后…

大数据第一步-Mac安装Hadoop3

1.安装工作 1.1 准备工作 前提是把jJDK8安装好,hadoop3.x最低需要jdk8。 然后打开共享把远程登陆打开,不打开说是后面会报错, 到终端输入命令:ssh localhost 生成新的keygen否则后面会报错 Permission denied 命令:…

SAP/ABAP(二)

一、循环结构 *&---------------------------------------------------------------------* *& Report ZDEMO_LIMING01 *&---------------------------------------------------------------------* *&作者:黎明 *&--------------------------…

DBISAM Client-Server Crack

您是否需要经过验证且可靠的 BDE(Borland 数据库引擎)替代品? DBISAM是Delphi或CBuilder应用中替代BDE的标准。它已被部署到全球数千个地点,并且可以打上品牌,以至于没有人知道正在使用DBISAM。它是按开发人员许可的&a…

创建型模式 - 工厂模式

概述 需求:设计一个咖啡店点餐系统。 设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCoffee】和拿铁咖啡【LatteCoffee】);再设计一个咖啡店类(CoffeeStore&#xf…

Sa-Token + SpringBoot 实现登录鉴权

1. 技术选型 今天最近在做登录、授权的功能,一开始考虑到的是spring boot + spring security,但spring security太重,而我们是轻量级的项目,所以,spring security不适合我们。 而后考虑spring boot + shiro,但shiro自带的aop会影响spring boot的aop,所以,shiro也不适…

等保测评包过是真的吗?安全吗?

最近有小伙伴在问,等保测评包过是真的吗?安全吗?哪位大哥来解答一下? 等保测评包过是真的吗?安全吗? 【回答】:等级保护采用备案与测评机制,而非认证机制,因此不存在“包…

uni-app:常见组件view、text、icon

根据html:可知div是块级标签,span是行级标签 这里view类似于div,text类似于span,即 块级标签:view 行级标签:text、icon 类似效果 两个icon图标,置于第一排 两个view,分别位于第…

四维轻云地理空间数据在线协作管理平台为测绘行业用户解决了这些难题

测绘作为一个基础性行业,从大比例的地形图到铁路网、公路网的分布,再到互联网地图,测绘的身影随处可见。随着科技的不断发展与进步,无人机也成为测绘行业的一部分。通过无人机测绘技术能够获取高精度的影像数据并生成三维模型和点…

华菱电子冲刺创业板上市:计划募资6.5亿元,总经理为日本国籍

7月17日,深圳证券交易所披露的信息显示,已对山东华菱电子股份有限公司(下称“华菱电子”)发出第1轮审核问询函。目前,华菱电子在深圳证券交易所的审核状态已经变更为“已问询”。 根据公开信息,华菱电子于2…

WooCommerce适合企业电子商务吗?

目录 成功开展电子商务业务变得比以往任何时候都容易。市场上有几个现成的平台,完全有可能将一个初步的想法快速转变为在线贸易业务,并源源不断地收到订单。 什么是 WooCommerce? 为什么您应该考虑使用 WooCommerce 很灵活 重量轻且功…