如何用PyQt实现瘦客户端应用程序
我想做的事情是这样的,我想知道一些有经验的人是怎么做到的:
我从http服务器那里收到了三个POST请求:
- 小部件和布局
- 然后是应用逻辑(最基本的)
- 数据
或者也许把前两个或者三个合并在一起会更好。我在考虑使用pyqt。我觉得我可以加载.ui文件,也能解析json数据。不过,我觉得通过网络传输代码并在客户端执行是相当危险的。如果有人能劫持连接,或者能更改应用设置以访问一个假服务器,那就麻烦了。
我想这样做是因为这样可以让所有客户端保持最新。这有点像一个网页应用,但因为Qt的原因更简单。基本上,这个“轻量级”应用就是一个最基本的编译过的python文件,它从服务器加载数据。
我该怎么做才能不在客户端引入安全问题呢?使用https就够了吗?有没有办法让pyqt在某种沙箱环境中运行?
附言:我并不局限于Qt或python,虽然我喜欢这个概念。我其实不太想用Java,无论是服务器端还是客户端。
2 个回答
使用网页浏览器吧,这是一个文档齐全的系统,可以满足你所有的需求。而且在浏览器中创建简单的图形应用程序也相对快速。以下是我这样认为的一些例子:
还有一个Pyjamas项目,它可以把Python代码编译成Javascript。我觉得这个值得一试。
补充:
你想把“应用逻辑”从服务器发送到客户端,但又不想发送“代码”,这其实是自相矛盾的,虽然你可能还没意识到这一点——即使你发送的“逻辑”是某种简化的临时“语言”(你甚至不把它当成一种语言;-),从某种意义上说,你的Python代码还是会解释那种语言,从而执行那段代码。你可能会在某种程度上“沙盒化”这些内容,但最终你还是在做这件事。
为了避免被劫持和其他花招,建议你使用HTTPS
,并在客户端验证服务器的证书:这样可以保护你免受你担心的所有问题(如果有人能修改应用程序以绕过HTTPS证书验证,那他们就能修改它,让它运行任何他们想要的代码,而不需要从服务器发送那段代码;-)。
一旦你使用了HTTPS,服务器可以发送Python模块(如果你需要支持多个Python版本的客户端,可以发送源代码,否则字节码也可以),客户端可以将它们保存到磁盘并导入/重新加载,这样就没问题了。你基本上是在做一种经典的“插件架构”的变体,其中“插件”实际上是从服务器发送过来的(而不是在某个特定位置的磁盘上找到的)。