我目前有一个用Django编写的非常简单的Web应用程序,我想在我的应用程序中实现类似回调/推送通知服务.
例如:当一个用户(客户端)将照片上传到服务器时,服务器会通知所有其他连接的用户该照片.
我想我可以使用Django信号在用户上传照片时产生回调,但是如何让Django向其他用户发布通知呢?此通知可以是警报,也可以只是将其他用户重定向到显示上传图片的新html.我更喜欢后者.
我是网络编程的初学者,所以我不确定这是否适合需要实现彗星或长轮询等实时内容的"实时网络应用程序".我的应用程序类似于聊天应用程序,除了我不提交文本文件而是提交图像文件.因此,我认为彗星解决方案可行.我已经尝试过很长一段时间看Orbited和Twisted但是没有运气用Django实现它,可能是因为我不明白如何用彗星解决方案完成我想要的东西.我希望更有经验的程序员能够指出我为了实现这一点我需要什么,或者我是否朝着正确的方向前进(使用彗星).
如果有人能给我一些关于如何继续的提示和提示,以及教程链接或指南,我将非常感激.
websockets的有趣部分是从服务器向浏览器发送基本上未经请求的内容吗?
好吧,我正在使用GregorMüllegger的django-websocket.在使用Django的websockets时,这是一个非常精彩的早期破解.
我已经完成了"你好世界".其工作方式是:当请求是websocket时,对象websocket将附加到请求对象.因此,我可以在解释websocket的视图中执行以下操作:
request.websocket.send('We are the knights who say ni!')
Run Code Online (Sandbox Code Playgroud)
这很好.我在浏览器中收到的消息就像魅力一样.
但是,如果我想在不发出浏览器请求的情况下这样做呢?
好的,首先我将websocket保存在会话字典中:
request.session['websocket'] = request.websocket
Run Code Online (Sandbox Code Playgroud)
然后,在shell中,我按会话密钥抓取会话.果然,会话字典中有一个websocket对象.快乐!
但是,当我尝试做的时候:
>>> session.get_decoded()['websocket'].send('With a herring!')
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "<console>", line 1, in <module>
error: [Errno 9] Bad file descriptor
Run Code Online (Sandbox Code Playgroud)
伤心.:-(
好了,我不知道很多关于插座什么,但我知道足够嗅出在调试器周围,你瞧,我看到在我的调试器插座(这是联系在一起的真正的WebSocket从请求)已FD = 6,而我从会话保存的网页套接字抓起一个已FD = -1.
套接字导向的人可以帮我解决这个问题吗?