编写运行在树莓派上的 webapp,,网页端 js 如何与后端 py 代码交互

2019-04-06 20:17:42 +08:00
 XIVN1987

想写一个运行在树莓派上的 app,界面打算用网页开发,这样树莓派就不需要接显示器了

因为 python 比较熟,所以功能后端功能代码打算用 python 写,web 框架用 bottle 或者 Flask,,但网页端的动态界面(如下拉列表、Switch、按钮)肯定要用 js 编写,,这样就需要在 py 和 js 代码间进行通信,传递状态信息

现在用的 Websocket 来做,,比如在网页上点下按钮,,js 就通过 websocket 给 py 发送一条消息,,py 接到消息后处理,,根据处理结果通过 websocket 给 js 发送不同的反馈,,js 再根据反馈更改界面(比如更改按钮上的文字)

这样感觉非常繁琐,,而且很容易造成前端和后端状态不一致

请问有其他更简洁的状态交互方法吗?

4589 次点击
所在节点    Python
30 条回复
LucasLee92
2019-04-06 20:28:33 +08:00
写 java 后端的,感觉你的问题刚像是前端的问题,而且就前后端交互来讲,前端发起请求,后端处理返回,前端展示,不是一个很普通的交互吗
{容易造成前端和后端状态不一致}这个让我很迷惑,状态不都是在后端的吗,前端展示就行了啊
个人猜测:你可能需要去了解一些前端的框架会有更好的思路
zwh2698
2019-04-06 20:34:28 +08:00
和树莓派无关吧,你这个是要学习 python web 开发吧。找个 python 框架学学
sunnyadamm
2019-04-06 20:35:45 +08:00
楼上正解
tomczhen
2019-04-06 20:38:03 +08:00
刚好我有在写一个,虽然没写完,不过你可以参考一下
https://github.com/TomCzHen/pyPiDashboard
ayase252
2019-04-06 20:38:04 +08:00
AJAX ?前端发送一个请求给后端,后端处理完给一个响应给前端,前端 UI 根据响应变化。
wzwwzw
2019-04-06 20:42:33 +08:00
肯定是 HTTP 啊。ws 也是可以的,只不过可能后端压力大一点咯。
XIVN1987
2019-04-06 20:43:18 +08:00
@LucasLee92
感谢回复,,那看来这种 webapp 做法确实是这个思路了

你说的是,,状态应该都在后端,,状态和界面不一致肯定是状态同步没做充分,,感谢指点
Maboroshii
2019-04-06 20:43:32 +08:00
可以参考 aria2 的 rpc 那一套吧
XIVN1987
2019-04-06 20:45:51 +08:00
@ayase252
感谢指点,,
我的一个疑问就是这种情况用 Websocket 好还是用 AJAX 好?
前端我不懂,所以希望后端多做些、前端尽量少做些,,
XIVN1987
2019-04-06 20:50:10 +08:00
@tomczhen
感谢,,学习下,,已 star
XIVN1987
2019-04-06 20:51:55 +08:00
@zwh2698
确实和树莓派无关,,不过光学 web 框架也解决不了我的问题吧,,web 框架又不讲前端怎么做,模板也做不出 js 那样的动态效果吧
XIVN1987
2019-04-06 20:53:39 +08:00
@Maboroshii
AJAX、Websocket、RPC,,好吧,,我去搜索、比较下哪个合适我,,
tomczhen
2019-04-06 20:59:25 +08:00
@XIVN1987 囧,我前端这块还是渣渣一个。

我是选择了 sanic + websocket,连接 ws 之后后端可以主动推送到前端。采用 ajax 一般都需要前端主动轮询,rpc 那套没看。

如果不是非要自己造轮子可以看看 cockpit - https://cockpit-project.org/ ,fedora server 默认自带这个。
ayase252
2019-04-06 21:08:37 +08:00
@XIVN1987
我不知道你的具体需求,websocket 比较适合像聊天室一样客户端和服务器双向通信的。AJAX 适合只需要客户端向服务器单向通信的。
XIVN1987
2019-04-06 21:16:04 +08:00
@ayase252
那看来我要继续用 websocket 了,,
baojiweicn2
2019-04-06 22:00:40 +08:00
我觉得 ws 比 ajax 请求更好,也更适合你的场景,当然你要是用 mosquito+ws 的方式做,就更 iot 了
baojiweicn2
2019-04-06 22:01:45 +08:00
mosquitto rabbitmq
Tokin
2019-04-06 23:19:25 +08:00
一般是 py web 写个 rest api,网页调用 api 即可。
如果是 websocket 的话控制起来更方便呀,为什么你是点击按钮之后再建立 ws 连接呢?
你应该打开网页的时候就建立 ws 连接,然后点击按钮之后通过 ws 通知后端,后端处理完毕之后再通知前端。
不需要重复建立 ws 连接,前后端也不会存在“状态不一致”的问题。
alan0liang
2019-04-06 23:35:04 +08:00
学一学 nodejs 吧(跑偏
XIVN1987
2019-04-07 00:12:04 +08:00
@Tokin
肯定是刚开始就建立 ws 连接啊,,我就是这么用的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX