首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django上gevent-socketio中的多个命名空间

django上gevent-socketio中的多个命名空间
EN

Stack Overflow用户
提问于 2014-05-14 18:16:26
回答 1查看 387关注 0票数 2

我设法创建了一个类似于gevent-socketio的django聊天示例的应用程序。然而,当我在sockets.py中添加一个命名空间(类)时,我得到了套接字错误:‘no_no_ namespace’。

我需要添加

代码语言:javascript
复制
socketio_manage(request.environ, { '/chat': ChatNamespace ,'/other': OtherNamespace },request)

在我看来,但是我有以下KeyError:

代码语言:javascript
复制
File "...socketio/__init__.py", line 67, in socketio_manage
    socket = environ['socketio']
KeyError: 'socketio'
EN

回答 1

Stack Overflow用户

发布于 2016-05-07 20:09:15

为了让Gevent Socketio与Django一起工作,您必须正确处理一些奇怪的事情。

您应该做的第一件事是确保您使用的是Socketio客户端版本0.9.6 (它应该在源代码中说明您使用的是哪个版本)。这是因为较新版本的Socketio客户端以Gevent Socketio无法识别的方式格式化GET和POST请求,而服务器只是假设它们是普通的Django请求,并且不会完成握手(这就是为什么环境中没有“socketio”键)。

您应该做的第二件事是将以下内容添加到您的根URL conf中:

代码语言:javascript
复制
import socketio.sdjango
socketio.sdjango.autodiscover()

这将自动定位任何名称空间(在sockets.py中)并注册它们,还将处理您的第一行:

代码语言:javascript
复制
socketio_manage(...)

如果由于某种原因,名称空间没有自动注册,可能是因为您没有向每个名称空间添加名称空间装饰器。在您的情况下,只需确保您的代码与以下内容匹配:

代码语言:javascript
复制
from socketio.sdjango import namespace

@namespace('/chat')
def ChatNamespace(...):
    ...

@namespace('/other')
def OtherNamespace(...):
    ...

我知道这个问题已经有近两年的历史了,但我最近解决了同样的问题。因此,对于将来偶然发现这一点的任何人来说,请考虑一下这个答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23651777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档