websocket 方案求助 -- 如何实现实时进度提交给前端

2019-09-26 17:17:29 +08:00
 chaleaochexist

前端点一个按钮, 发送一个 ajax, 后端开始做动作,同时不停的将处理进度实时推送给前端.

现在的思路是, 前端和后端 ajax 同时绑定同一个 group. 后端给 group 发消息, websocket 接什么消息发什么消息,向同一个 group. 这样前端就收到消息了.

def view(request):
    ws = websocket(***)
    # do something business logic
    ws.send()
    return 666

伪代码大概是这样的,但是 websocket server 端的心跳机制会导致和 view 里面创建的 ws 客户端失去连接.

现在的解决方案是, 在 view 里面创建一个线程, 在新起的线程里面 不停的发消息给 websocket server.

拍脑袋感觉,应该在 view 里面做一个非阻塞带回调的 websocket 客户端,但是...如何实现呢...

5722 次点击
所在节点    程序员
30 条回复
tanszhe
2019-09-27 09:16:10 +08:00
这么简单的问题 ,搞不清楚 ……
MonoLogueChi
2019-09-27 09:31:29 +08:00
@Nasei signalR 吹?我也喜欢用
LeeSeoung
2019-09-27 09:36:33 +08:00
ws 不是双向的么。。没搞明白你想做啥。。为啥 ws 会自己断。。
chaleaochexist
2019-09-27 09:52:50 +08:00
@LeeSeoung 和本题无关的一种可能, timeout 不就断了吗?很好理解.
shuizhengqi
2019-09-27 10:38:58 +08:00
直接 setInterval 不好使么?
shuizhengqi
2019-09-27 10:39:39 +08:00
1s 一次,就能做到跟实时差不多的效果
zpf
2019-09-27 11:34:47 +08:00
前端不应该直接请求 websocket 服务器,为什么还要先请求 view 层,view 层在做请求转发?
chaleaochexist
2019-09-27 12:20:36 +08:00
@shuizhengqi 当然可以 setInterval 直接发 ajax 就可以了,和 websocket 有啥关系?

@zpf 实时推送后台的处理进度.
view 在做一个业务逻辑,并将业务逻辑的进度发送给前端.
你的意思是说,这个业务逻辑不用 ajax 而是用 websocket 来实现是吗?
hsfzxjy
2019-09-27 12:25:18 +08:00
django channels,了解一下
chaleaochexist
2019-09-27 13:06:53 +08:00
@hsfzxjy 谢谢我用的就是 channel,另外本问题和 ws server 端没有太大关系,我的问题是如何做一个异步非阻塞的 ws 客户端.channel 还支持客户端吗?像 aiohttp 那样?

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

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

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

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

© 2021 V2EX