(转载)Electron & C++ 快速开发桌面Web "混合"应用

高性能Electron桌面应用开发 - 使用ffi-napi调用C++库 Electron让我们用Web技术开发桌面应用,但当需高性能时会受限。此时,可使用C++开发底层库,然后在Electron中通过ffi-napi调用。ffi-napi可以在Node.js中加载和调用C/C++的动态库。本文介绍如何在Electron中使用ffi-napi 调用C++库:开发库,安装ffi-napi,加载库并调用函数,检查结果。通过调用C++函数,可实现高性能功能,大大提高应用性能和扩展性。 阅读详情

转载自:https://www.jianshu.com/p/5a4c7ce2be54?winzoom=1


最近要做个小东西,接入网易直播 SDK,但有一个比较蛋疼的问题就是 web 推流一般都用 Flash,Flash 音频只能用 speex,然而接收端如果是苹果,一般都会选 HLS,而 HLS 只能用 AAC 音频。这样一来,要么服务端再做一次转码和重新分发(延迟+成本,所以猪厂直接不支持),要么只能选择推流端本地先编好 AAC(iOS/Mac/PC). 只能请 C++ 大哥出马了。

这活又需要对接现有的网站,包括用户、频道、互动啥的,又要得急。咋办捏?去翻了翻 SDK 提供的 Demo, 我的妈呀竟然是 QT 做的,那咋改嘛…想起了从前被 QT 和 MFC 支配的恐惧,还是换个思路吧。

前一阵子看过 Electron,正好嵌网页方便,放狗搜了一圈,发现了node-gyp这高科技。可以直接调用 C++ 模块,好!就你了!

然后就开始了漫长的 Visual Studio 安装过程…话说 VS 这货是越来越大了,以前去食堂吃顿饭的功夫就能装完,后来去吃个烤串才能装完,再后来…好像得喝上几轮才能装完…

后来才发现似乎不装也行…… 直接这样就好了


npm install -g --production windows-build-tools

npm install -g node-gyp

然后就可以放心大胆地写 C++ 啦,按照套路来就好了(来自 node 官网文档 )


#include <node.h>

namespace demo {

using v8::FunctionCallbackInfo;

using v8::Isolate;

using v8::Local;

using v8::Object;

using v8::String;

using v8::Value;

void Method(const FunctionCallbackInfo& args) {  

    Isolate* isolate = args.GetIsolate();  

    args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));

}

void init(Localexports) {

    NODE_SET_METHOD(exports, "hello", Method);

}

NODE_MODULE(addon, init)

}  // namespace demo

这样就完成了一个可供 node 调用的 C++ 模块,只需要再加个配置文件binding.gyp

{
  "targets": [{
    "target_name": "addon",
    "sources": [ "hello.cc"]
  }]
}

然后

node-gyp configure
npm install

然后直接开个js

var addon = require("./build/Release/addon");
console.log(addon.hello());

哇 就可以了 是不是很神奇……

接入 SDK 的时候有个坑,网易直播 SDK 只提供了 32bit 的库,如果是 win64 系统,默认编译也是 64位。可能会出现一个奇怪的错误提示The system cannot find message text for message number 0x%1 in the message file for %2 你就不能直接告诉我Wrong Architecture么……
Don't panic, 坐和放宽,你需要node-gyp rebuild -target=1.4.13 -arch=ia32 -dist-url=https://atom.io/download/atom-shell (1.4.13 是你用的 Electron 版本号)

网易直播 SDK 给的 demo 代码还比较靠谱了,照着文档写出来能编译过,这就比你们某些开源项目不知高到哪里去了 23333。
但有些细节地方还是需要处理的,

比如主播通常会外接麦克风啥的,那就需要获取音视频设备列表然后让用户选择;

还有本地要做个预览窗口,如果偷懒可以直接嵌个网易提供的 web player 直接拉流回来,但这样一来肯定有延迟啦,感觉上就会怪怪的。所以还是需要本地来播放一下。demo 里提供的方法是 QPaint, 我们既然不用 QT 就得另想办法啦,比如 VLC/FFMpeg 之类的总得嵌一个吧?

然后还有多线程之类的也要做的吧?C++ 做东西就是要考虑比较多

还得处理跟 web 的整合,比如通过 API 获取推流的地址、界面布局的整合

还得考虑到客户的业务是培训/在线教育,以后有可能还要接入其他的比如屏幕共享啦 PPT 播放啦 白板啦之类的,这就得折腾另外一套SDK了,目前还没看,还不知道能不能支持,只能开脑洞了,比如白板直接转成 HTML5 Canvas?

哦 还有 Electron 自己的几个问题,代码不能让人直接扒了,可以通过 asar 之类的打个包,体积太大,估计还得用 UPX 之类的压一下,压完了还得测测什么XX卫士 XX助手 会不会报毒…

有人估计要问了这么麻烦你为啥不直接用原生…说了啊!我害 pia 嘛!
而且客户那边的工程师估计 web 居多,界面你们就可以随便折腾了啊,我只需要维护 C++ 这一块就够了…

嗯嗯 基本就是这样,我继续搬砖去了…



作者:SouthWolf
链接:https://www.jianshu.com/p/5a4c7ce2be54
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
关于在electron中调用C++动态库的经验总结 关于在electron使用dll动态库的经验总结 阅读详情

相关推荐

探索 Electron:将 Web 技术带入桌面应用

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能来构建功能强大且跨平台的应用程序,这对于提升开发效率和应用程序的快速交付具有重要意义。

ztK63LrD的博客 5013

打通 C/C++与JavaScript通信 快速开发Electron桌面应用

小拉实际工作中,有时需要开发串口、网络等工具类上位机桌面应用软件,业务逻辑通常是C、C++开发的,当然使用QT、MFC等技术来开发,怎奈羡慕前端做界面又美观、又速度,有大量的UI框架,图表库使用。笔者找到了一条解决方案业务逻辑由C/C++实现,界面由纯html5实现,应用QWebchannel打通C++与JS的通信。..................

ruglcc's blog 9375

基于Electron的桌面端应用开发和实践

先简单介绍一下electron。electron是由Github开发的开源框架,现在由OpenJS基金会维护的一个开源项目。它允许开发者使用 HTML、CSS 和 JavaScript 来构建跨平台的桌面应用,而且构建出来的应用,可以很好地兼容 Mac、Windows 和 Linux 这些主流的操作系统。

逸尘的专栏 9290

Electron + node C++开发

node-gyp Electron C++,使用nan npm install -g prebuild node-gyp electron npm install nan bindings --save #include &lt;nan.h&gt; void Add(const Nan::FunctionCallbackInfo&lt;v8::Value&gt;&amp; info) { if (info.Length() &lt; 2) { Nan::ThrowTyp...

张人杰的博客 817

Electron PC桌面应用exe开发

基于 Electron、Qt、WPF 和 WinForms 开发的桌面软件Q的特点和适用场景。Electron 适合跨平台的 Web 技术栈应用程序,Qt适用于高性能和可扩展性要求的应用程序,WPE 适用于复杂的 Windows 平台应用程序,而 Winfomms 适合快速开发简单界面的应用程序。开发者可以根据自己的需求和技术栈选择合适的框架,以提高开发效率和应用程序质量。

qq_36158551的博客 1638

Electron 28 与 Qt 6.7 混合开发:3步集成C++模块提升Web应用性能

本文详细介绍了如何通过Electron 28与Qt 6.7的混合开发架构,在3步内集成C++模块以显著提升Web应用性能。通过Qt的C++后端处理计算密集型任务,结合Electron的前端优势,实现接近原生应用的性能表现,特别适合3D数据可视化、实时音视频处理等高性能需求场景。

weixin_30335353的博客 705

Electron:用Web技术重塑桌面应用开发范式

Electron框架革新了跨平台桌面应用开发,通过整合Chromium和Node.js,使开发者仅需Web技术即可构建Windows/macOS/Linux应用。其核心采用主进程-渲染进程分离架构,提供200+原生API,支持VSCode、Slack等百万级应用。优势包括开发效率提升50%、丰富的前端生态和无缝更新机制,但也面临安装包大(100MB+)和内存占用高的挑战。社区正通过模块化、WASM加速等方案优化,未来将向轻量化、安全化发展,持续推动&quot;一次开发,多端运行&quot;的理念。

weixin_70208651的博客 1074

Electron与其他桌面开发框架的优势对比

开发效率高熟悉的技术栈丰富的生态系统快速迭代跨平台能力强一次编写,多平台运行统一的用户体验社区支持活跃的开发者社区丰富的学习资源大量可用组件。

q68686的博客 1336

Electron和C/C++开发桌面应用对比

跨平台支持:使用 Web 技术:丰富的生态:开发效率高:内置功能:性能问题:体积较大:不适合底层开发:高性能:底层控制:小巧轻量:跨平台支持:适合复杂逻辑:开发难度高:界面开发复杂:生态相对较小:尽管 Electron 非常流行,但在以下场景中,C/C++ 仍然是更好的选择:性能敏感的应用:底层控制需求:资源占用敏感的应用:复杂逻辑的应用:Electron 在以下场景中具有明显优势:快速开发跨平台应用:界面复杂但逻辑简单的应用:需要频繁更新的应用:依赖 Web 生态的应用:选择哪种技术取决于你的应用需求:

weixin_52236586的博客 1650

Electron开发中的C++应用:深入探索与示例代码

尽管Electron主要使用JavaScript进行开发,但在某些情况下,我们可能会接触到C++,以便实现更高性能的功能或访问底层系统资源。在本文中,我们将深入探索在Electron开发中使用C++的一些方面,并提供一些示例代码来帮助您入门。我们提供了一个简单的示例代码,演示了如何使用C++扩展在Electron应用程序中计算斐波那契数列。在上述代码中,我们首先加载了Electron的主要模块,并引入了我们之前编译的C++扩展模块。事件中,我们调用了C++扩展模块中的。一、C++扩展的目的和用途。

XwyMysql的博客 1157

【好文转载】分享这半年的 Electron 应用开发和优化经验

文章转载自社区,仅供学习记录。侵删。 2019 年最后一发,谈谈这半年 Electron 应用开发和优化心得。干货也挺多,希望能给你带来一点启发。 下半年可以拿出来说一说的项目,估计就是我们用 Electron 重构了一个桌面端应用。这个应用类似于钉钉或者企业微信,主要功能有即时通信、语音/视频、会议,基本功能和交互体验和 PC 端微信差不多(其实就是模仿),具体细节就不展开了, 这些对本文不重要。如下图 文章大纲 为什么选择 Electron? 进程模型 技术选型与代码组织 性能优化(硬货) .

skysys的研究小屋 4155

Electron 开发入门

课程亮点 剖析 Electron 从安装到发布的整个流程 如何使用 Git 管理 Electron 应用源代码 如何使用 C++ 开发 Electron 本地模块 知识点 + 示例 + 源代码 课程背景 Electron 允许使用 Web 技术(HTML 5、CSS 3、JavaScript)开发跨平台桌面应用,这对 Web 前端和 Node.js 开发者是一大福音,因为从此又多了一项技能。目...

GitChat 2万+

树莓派5安装ROS2小白指南避坑攻略

手把手教你如何在树莓派5上顺利安装ROS2,避开常见问题与陷阱,提升配置效率。针对树莓派5安装ros2过程中的依赖冲突、源配置错误等高频难题提供解决方案,适合新手快速上手。

weixin_35754962的博客 1005

关于跨平台桌面应用程序开发的趋势

1.纯C++开发       纯C++开发的客户端典型的就是基于QT开发,C++程序员一般会选择,而在工控嵌入式领域,基本就是唯一的选择。 由于QT已经发展了很多年(QT6已经出来了,但目前市场上主要还是使用QT5),内部各种基础库、UI控件都比较完善,也支持类似前端的CSS样式控制,相对MFC来说,总体开发算是比较方便的。当然,如果不需要跨平台,只希望在Windows上运行的话,那除了MFC,也可以选择WPF去开发,但其需要使用C#语言,适合熟悉.Net开发技术的程序员。 2. 前端Web和C++混合开发

欧特GO 5343

RC4加密算法详解

RC4(也称为 Rivest Cipher 4)是流密码的一种形式,流密码逐字节操作数据流。RC4 流密码是使用最广泛的流密码之一,它通过算法一次一个字节地加密消息,简单并且操作速度快。RC4是一种在电子信息领域加密的技术手段,用于无线通信网络,是一种电子密码,只有经过授权的用户才能享受该服务,使用 64 位或 128 位密钥大小。它通常用于安全套接层 (SSL)、传输层安全 (TLS) 等应用,也用于 IEEE 802.11 无线 LAN 标准。在存储大量的信息时,RC4展现出它的实用性,面对大量的数据,

weixin_43211186的博客 1万+

scannet数据集下载文件

scannet数据集下载文件 由于大家会申请scannet数据集,审批比较慢,我将下载的文件里面的内容贴出来,大家可以复制放进py文件中,运行就可以下载 ps:别再私信要数据集了,这个自己下载,如果光三维数据的话,还是很快的,当然如果路由器翻了墙的话,下载会更快。 #!/usr/bin/env python # Downloads ScanNet public data release # Run with ./download-scannet.py (or python download-scannet.

weixin_40766438的博客 9233

Electron和QT都是跨平台的桌面开发框架,该如何抉择呢?

一、Electron 的特点与优势(1)基于 Web 技术Electron 是一个基于 Web 技术的跨平台桌面开发框架,它使用 HTML、CSS 和 JavaScript 等前端技术进行开发。这对于熟悉 Web 开发的开发者来说,无疑是一个巨大的优势。他们可以利用自己已有的知识和经验,快速上手 Electron 开发,无需学习新的编程语言和开发工具。例如,一个前端开发者可以轻松地使用 Electron 开发一个桌面应用程序,将自己的 Web 项目打包成一个可执行文件,在不同的操作系统上运行。

2401_82943878的博客 3633

YOLOv8_obb的C++工程部署实战:从模型转换到实时视频推理

本文详细介绍了YOLOv8_obb模型在C++环境下的完整工程部署流程,涵盖从PyTorch模型到ONNX格式的转换、基于ONNX Runtime的C++推理引擎搭建、旋转框后处理解析,以及实时视频流处理与性能优化。文章重点解析了模型转换的关键参数、环境配置的常见问题、核心推理代码的实现,并提供了实用的避坑指南,旨在帮助开发者高效完成YOLOv8_obb的C++工程部署。

weixin_29100927的博客 45

electron-vue 脚手架实战指南:用 vue-cli 快速搭建 Electron + Vue 桌面应用

本文档是 electron-vue 项目在仓库中的官方介绍与快速上手文档,核心目标是消除"手动搭建 Electron + Vue 应用"的重复劳动:它以 vue-cli 模板的形式提供了一套开箱即用的工程骨架,集成 webpack、vue-loader、vue-router、vuex 等最常用插件,并内置 electron-packager / electron-builder 打包、单元测试与端

gitblog_00843的博客 1043

<工控><PLC>汇川Easy521系列PLC与汇川SV630N伺服进行EtherCat通讯的相关配置及指令编写

本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。

用沸腾的热血,支付我们的人生吧! 2万+

Ubuntu22.04 上ROS1 Noetic的安装与常见问题解决

本文详细介绍了在Ubuntu 22.04系统上安装ROS1 Noetic的两种主要方法:推荐使用社区维护的适配仓库进行便捷安装,并提供了从源码编译的备选方案。文章重点解决了安装后编译ROS包时极易遇到的“shared_mutex”等C++标准库冲突问题,并给出了其他常见错误的排查与解决指南,帮助开发者顺利搭建稳定的ROS开发环境。

weixin_29295541的博客 364

桌面应用开发框架比较:Electron、Flutter、Tauri、React Native 与 Qt

背景:Electron 由 GitHub 开发,因其使用 HTML、CSS 和 JavaScript 等 Web 技术构建跨平台桌面应用程序的能力而广受欢迎。主要功能:Electron 通过其 Node.js 集成提供对本机 API 的轻松访问,使开发人员能够创建功能丰富的应用程序。它还支持用 C++ 编写的本机插件,尽管构建这些插件可能更复杂且容易出错。

Admans的专栏 6719

如何选择汽车域控制器MCU?一文看透7大关键维度[特殊字符](含芯片推荐、踩坑预警)

MCU选型 Checklist(实用表格)维度你需要考虑的问题Flash/RAM我的任务栈够吗?是否支持OTA双Bank?安全等级这功能出故障会不会危及人命?接口资源够几个CAN?支持CAN FD?ETH是否支持TSN?主频我的软件响应周期是多少?是否带Cache?多核架构是SMP/AMP?是否带锁步核?跑多个任务会不会互相干扰?功耗与封装睡眠电流够低?有外扩DDR空间?BGA能焊?供应链有无国产替代?交期是否稳定?支持AUTOSAR吗?

weixin_43199439的博客 662

Electron:白话Electron开发桌面端应用

多功能记事本,是我在云内发起的一个基于Electron开发的桌面记事本工具的雏形,主要的功能是记事本,其次是各种工具的整合,比如,我们收数的时候,都要通过上游的卸数标志flag文件来生成表的字段信息,其实这个过程,很多人采用的方式都是通过复制粘贴的方式,但是我一开始采用的方式就是Notepad++加上正则替换的方式来处理的,不管多少字段,就是一个命令一个按钮,问题就解决了。再比如需要将多行压缩成一行,说白了,就是去除换行符啦。上面这些只是日常工作中常见的两个小案例。

wltsysterm的博客 1643

【突变检验合集】含Pettitt突变检验等

突变检验方法合集

WW、forever的博客 3534

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

快速了解Electron:新一代基于Web的跨平台桌面技术

本文引用了作者“ ConardLi”的《用JS开发跨平台桌面应用,从原理到实践》一文部分内容,原文链接:segmentfault.com/a/1190000019426512,感谢原作者的无私分享。 1、引言 现在开发IM应用动不动就要求多端——即Android端、iOS端、PC端、Web端等,Android端和iOS端作为两种不同的移动端技术,单独开发和维护还能理解,PC端和Web端如果要单...

hellojackjiang2011的博客 2863

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: (转)wireshark过滤语法总结
下一篇: c++实现waveinopen录音功能
xiaolu289
博客等级 码龄19年 8粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值