我设法创建了一个类似于gevent-socketio的django聊天示例的应用程序。然而,当我在sockets.py中添加一个命名空间(类)时,我得到了套接字错误:‘no_no_ namespace’。
我需要添加
socketio_manage(request.environ, { '/chat': ChatNamespace ,'/other': OtherNamespace },request)在我看来,但是我有以下KeyError:
File "...socketio/__init__.py", line 67, in socketio_manage
socket = environ['socketio']
KeyError: 'socketio'发布于 2016-05-07 20:09:15
为了让Gevent Socketio与Django一起工作,您必须正确处理一些奇怪的事情。
您应该做的第一件事是确保您使用的是Socketio客户端版本0.9.6 (它应该在源代码中说明您使用的是哪个版本)。这是因为较新版本的Socketio客户端以Gevent Socketio无法识别的方式格式化GET和POST请求,而服务器只是假设它们是普通的Django请求,并且不会完成握手(这就是为什么环境中没有“socketio”键)。
您应该做的第二件事是将以下内容添加到您的根URL conf中:
import socketio.sdjango
socketio.sdjango.autodiscover()这将自动定位任何名称空间(在sockets.py中)并注册它们,还将处理您的第一行:
socketio_manage(...)如果由于某种原因,名称空间没有自动注册,可能是因为您没有向每个名称空间添加名称空间装饰器。在您的情况下,只需确保您的代码与以下内容匹配:
from socketio.sdjango import namespace
@namespace('/chat')
def ChatNamespace(...):
...
@namespace('/other')
def OtherNamespace(...):
...我知道这个问题已经有近两年的历史了,但我最近解决了同样的问题。因此,对于将来偶然发现这一点的任何人来说,请考虑一下这个答案。
https://stackoverflow.com/questions/23651777
复制相似问题