Electron+Python软件系统开发记录(一):基础环境搭建
1.问题说明
最近开始做本科毕设,其中有一部分内容是搭建一个完整的软件系统。系统要求就是常见的客户端,服务器,数据库的整体架构。因为本科不是计算机系的,所以学习的相关技能少,以前写课程设计一般用QT或者MFC,还有Mac的OC语言。本着多学习的态度,这次选用了Electron框架,可以迫使自己学学html,css,js这些东西。后端因为需要大量数据处理和深度学习,因此采用python。这个文档会持续更新,记录自己的系统开发过程。
2.框架简介
Electron是用js,html,css开发客户端APP的框架。我的理解就是给网页套了个壳,打开桌面软件好像打开了一个chorme一样。
3.通信方式选择
经过调研,发现网上的Electron+python程序实现前后端通信的方式主要有三种:
- http
- zerorpc
- thrift
这里的通信是指桌面端前端和本地后台的通信,用http不太合适,也太笨重了。
跟着网上的demo搞了一天zerorpc这个方式,最后也没成功。大概看了一下,zerorpc其中的依赖zeromq好像已经停止更新维护了。并且其存在很多版本问题,报错说需要abi编号为75的node.js版本,但是我去官网看,最新的一些版本都是79(我用的node12.13.1),再往前是72,没有75的,所以我就放弃了zerorpc。
后来我发现了thrift,Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。很遗憾没有对它进行深入了解,不过用这个比较简单地就把通信demo跑通了。
4.thrift使用
使用Thrift通信首先需要在两端都安装依赖库:
pip install thrift
npm install thrift
然后写一个自己的python端的server
import json
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
from gen_py.test import userService
class Test:
def test1(self, dic):
print("one")
dic = json.loads(dic)
#dic.name = dic.name + "From Pyhton"
return f'PPPPPPPPPP, {dic["name"]}!'
def log_test(self, info):
print("收到账户密码验证")
info = json.loads(info)
if info["name"] == "zhangrl" and info["password"] == "1234":
return '1'
else:
return '0'
if __name__ == "__main__":
port = 8000
ip = "127.0.0.1"
# 创建服务端
handler = Test() # 自定义类
processor = userService.Processor(handler) # userService为python接口文件自动生成
# 监听端口
transport = TSocket.TServerSocket(ip, port) # ip与port位置不可交换
# 选择传输层
tfactory = TTransport.TBufferedTransportFactory()
# 选择传输协议
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
# 创建服务端
server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
print("start server in python")
server.serve()
print("Done")
在Electron(其实是nodejs)中写一个client,在electron中我理解就是渲染进程吧,实现通信,里面导入的文件先不用管,马上就说:
var thrift = require('thrift');
var userService = require('./gen-nodejs/userService.js');
var ttypes = require('./gen-nodejs/test_types.js');
var thriftConnection = thrift.createConnection('127.0.0.1', 8000);
var thriftClient = thrift.createClient(userService,thriftConnection);
thriftConnection.on("error",function(e)
{
console.log(e);
});
const {BrowserWindow} = require('electron').remote
let name = document.querySelector('#name')
let result = document.querySelector('#result')
name.addEventListener('input', () => {
var dic = {name: name.value}
dic = JSON.stringify(dic)
thriftClient.test1(dic, (error, res) => {
if(error) {
console.error(error)
} else {
result.textContent = res
}
})
})
name.dispatchEvent(new Event('input'))
上面是代码层面,真正在项目中运行起来还缺少很多东西,在WIN10下你需要:
- 去thrift的github下载exe程序
- 定义一个接口文件 比如 “test.thrift"
service userService {
string test1(1:string name);
string log_test(1:string info);
}
3.终端执行thrift文件
thrift --gen js:node test.thrift
thrift -r --gen py test.thrift
这样会自动生成两个文件夹 gen-nodejs & gen-py(我这里需要改名为gen_py才能用),这样上述代码中就能使用它们了。
5. 运行简单demo
我跑的是这个大哥的demo。运行过后能成功就可以了,如果有什么问题,就打开开发者工具自己调吧。
来源:CSDN
作者:急速飞翔的卤蛋
链接:https://blog.csdn.net/qq_40443651/article/details/103616096