electron-vue小试身手
最近一个项目(vue)需求是用硬件来触发web端页面显示以及效果的切换,客户的硬件设备只支持用tcp协议通讯,而我们的前端呢是用不了tcp的,众所周知在浏览器端,我们只能用http/https协议(ajax)和websocket协议来通讯,前端页面开发完成之后,我用node起了一个websocket实现了项目需求,但是终归还是要用tcp的啊。这时候就得用之前同事说过的electron来构建整个项目了(之前看了一个demo把vue打包后的静态文件打包成桌面程序)。但是,怎么在electron里面用tcp把数据推给vue页面呢?
同事也是非常热心,百度了好些资料,我自己也百度了好多,在electron里面起一个tcp倒是简单,demo奉上:
//tcp服务端
var net = require('net');
var server = net.createServer(function(connection) { connection.on('end', function() {
//console.log('客户端关闭连接');
});
connection.on('data',function(data){
//console.log('服务端:收到客户端发送数据为',data)
})
});
server.listen(, function() {
console.log('server is listening');
});
这个net模块是node提供的,自然也就方便地起了一个tcp服务,然后用测试工具来发送信息:
electron也是理所当然地收到了(上面tcp监听的是9002端口),但是怎么发给vue页面呢,下面奉上项目结构:
在index.js里面收到了通过tcp协议发来的消息,要推送倒Main.vuue页面,自然想到在该页面起一个事件监听器,当时想到的是用单例模式(vue的中央事件管理器)来处理,但是失败了。
后来在同事的帮助以及指导下,看到了类似如下截图使用的electron通讯方法:
然后就一直在这个ipcMain和ipcRenderer通讯上磨了好长时间,我们的需求是主进程给渲染进程发消息,但是!这个ipcMain居然只有事件监听,而且在主进程里面拿不到ipcRenderer这个对象(想着用这个在tcp里面给页面里面的ipcRenderer发消息)
期间还看了一篇博客(写得有点乱,自己封装了一些东西,但是博客里面写得不明不白,直接让我更加糊涂),多方查找无果之后,抛弃了上述的所有方法,乖乖地去看官方文档!!!
然后发现一个叫mainWindow.webContents的东西,这玩意儿就能给渲染进程(页面)发消息,后来才发现上述ipcMain的监听事件回调函数里面的event.sender对象,其实就是这个mainWindow.webContents;
so,主进程给渲染进程发消息只能通过mainWindow.webContents这个对象的send方法!!!跟ipcMain没有半毛钱关系!!!
所以,最终:
主进程:
渲染进程(页面):
至此,在electron内使用tcp实现主进程和渲染进程之间通讯已经告一段落,但是项目要打包成桌面应用啊,这块有几个坑需要注意一下:
1⃣️安装依赖不要使用淘宝镜像!!!使用淘宝镜像会疯狂报错!!!直接npm install,速度慢就速度吧(虽然不能用淘宝镜像,但是yarn貌似可以);
2⃣️用electron脚手架构建的项目,安装额外包的话,该依赖可能不会自动写到package.json文件里面去,所以项目npm install的话,没有自动写到配置文件的依赖不会下载,项目运行的话,不会报错,但是会一直显示一个文件目录的页面,个人建议,添加依赖之后,检查一下该依赖有没有自动写到配置文件里面去,没有的话手动添加一下,以免到时候除了问题半天查不出来;
3⃣️.electron-vue/webpack.renderer.config.js,打包成桌面应用之前,该文件122行的判断改成如下代码段:
nodeModules: path.resolve(__dirname, '../node_modules'),
4⃣️最后贡献两条electron-vue下桌面应用的打包脚本(win、mac平台):
"build-win": "node .electron-vue/build.js && electron-builder --win --x64",
"build-mac": "node .electron-vue/build.js && electron-builder --mac --x64",
谨以此记录首次electron开发遇到的诸多问题,好在最终还是解决遇到的所有问题,以后有空再用electron写点有意思的桌面应用吧。
electron-vue小试身手的更多相关文章
- 手把手教Electron+vue的使用
.现如今前端框架数不胜数,尤其是angular.vue吸引一大批前端开发者,在这个高新技术快速崛起的时代,自然少不了各种框架的结合使用.接下来是介绍electron+vue的结合使用. 2.Elect ...
- 从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(一)
摘要:随着前端技术的飞速发展,越来越多的技术领域开始被前端工程师踏足.从NodeJs问世至今,各种前端工具脚手架.服务端框架层出不穷,“全栈工程师”对于前端开发者来说,再也不只是说说而已.在NodeJ ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架,一套代码,同时构建客户端、web端(二)
摘要:上篇文章说到了如何新建工程,并启动一个最简单的Electron应用.“跑起来”了Electron,那就接着把Vue“跑起来”吧.有一点需要说明的是,webpack是贯穿这个系列始终的,我也是本着 ...
- electron+vue实现菜单栏
公司开发的产品都是用c++写的,而且还都是几个人,老板想搞下创新,就是看看能否通过其它的方式来实现前后端分离.然后我就了解到了electron这个东西,之前学安卓的时候看到过flutter,不经意间看 ...
- Electron+Vue – 基础学习(1): 创建项目
Electron 和 Vue 都是干啥的,就不做过多介绍了,可以去官网瞅瞅.下面总结 Electron+Vue 创建项目,Electron + Vue 创建项目实际上相当于:创建Vue项目 + Ele ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(五)预加载和Electron自动更新
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
- 【原创】从零开始搭建Electron+Vue+Webpack项目框架(六)Electron打包,同时构建客户端和web端
导航: (一)Electron跑起来(二)从零搭建Vue全家桶+webpack项目框架(三)Electron+Vue+Webpack,联合调试整个项目(四)Electron配置润色(五)预加载及自动更 ...
- electron+vue制作桌面应用--自定义标题栏
electron会默认显示边框和标题栏,如下图 我们来看一下如何自定义一个更加有(gao)意(da)思(shang)的标题栏,例如网易云音乐这种 首先我们要把默认的标题栏删掉,找到主进程中创建窗体部分 ...
- 使用electron+vue开发一个跨平台todolist(便签)桌面应用
# 1 最近一直在使用electron开发桌面应用,对于一个web开发者来说,html+javascript+css的开发体验让我非常舒服.之前我一直简单的以为electron只是张网页加个壳,和那些 ...
- Electron+Vue+ElementUI开发环境搭建
Node环境搭建 本文假定你完成了nodejs的环境基础搭建: 镜像配置(暂时只配置node包镜像源,部分包的二进制镜像源后续讨论).全局以及缓存路径配置,全局路径加入到了环境变量 $ node -v ...
随机推荐
- P3731 二分图匹配必经边
题意经过一番转换变成了 让你在一个二分图上删一条边使得二分图的最大独立集大小至少+1 二分图的最大独立集=点数-最小点覆盖(最大匹配) 点数是固定不变的 所以我们要减少最大匹配数 则删掉的哪一条边必须 ...
- https加载http资源,导致ios手机上的浏览器图片加载问题
今天解决一个线上bug的时候发现的问题,如下图: 从表象来看,同样的图片,安卓手机上可以正常展示,但是到ios手机上首次进入页面就不能正常显示图片,必须手动刷新一次页面才能正常加载. 这时候,我们首先 ...
- 解决tomcat控制台乱码+清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间问题
一.乱码 1.打开Tomcat的目录,找到conf文件夹,一般修改server.xml中的编码集,改为utf-8即可 2.若server.xml中编码设置的就是utf-8,可以修改logging.pr ...
- 消金ABS
对于持牌消金公司来说,发行ABS需满足至少3年经营期限的硬性规定,目前已开业的24家消金公司里,有15家符合此项规定. 2019年下半年以来,个人消费金融领域共发行了15个资产证券化产品,发行规模达4 ...
- mybatis-动态sql-trim、where、set
1. where标签的作用:如果该标签包含的元素中有返回值,就插入一个where:如果where后面的字符是以AND和OR开头的,就讲他们剔除. int findUserByWhere(@Param( ...
- psd缩略图生成上传解决方案
第一点:Java代码实现文件上传 FormFile file = manform.getFile(); String newfileName = null; String newpathname = ...
- VirtualBox:无法访问共享文件夹
造冰箱的大熊猫@cnblogs 2019/5/9 问题:VirtualBox中安装Linux虚拟机,设置宿主机某个文件夹为虚拟机的共享文件夹.在虚拟机中,该共享文件夹显示为“sf_×××”,打开该文件 ...
- mysql8.0.11安装
1.下载mysql-->下载 2.解压 3.添加my.ini配置文件 [mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=C:\wnmp\mysql ...
- C++回调函数、静态函数、成员函数踩过的坑。
C++回调函数.静态函数.成员函数踩过的坑. 明确一点即回调函数需要是静态函数.原因: 普通的C++成员函数都隐含了一个this指针作为参数,这样使得回调函数的参数和成员函数参数个数不匹配. 若不想使 ...
- Jmeter(十一)函数助手
可以在JMeter的选项菜单中找到函数助手对话框 我们可以从下拉列表中选择一个函数,并为其参数设定值.如图,表格的左边一列是函数参数的简要描述,右边一列是供用户填充参数的值.不同函数要求的参数也不同. ...