python - Django channel 不发送回复消息

标签 python django sockets rabbitmq channels

首先我要说的是:我是 RabbitMQ 及其相关概念的初学者。我想我已经开始理解了。

我目前在使用 Django Channels 时遇到问题。我有一个使用“asgiref.inmemory.ChannelLayer”的设置,目前正在切换到“asgi_rabbitmq.RabbitmqChannelLayer”,这一切似乎工作正常,直到我尝试从浏览器连接到 websocket。有一段时间(7 或 8 秒)没有任何反应,然后突然 websocket.receive 被触发并且 websocket 断开连接。

我认为这是因为回复 channel 没有收到我的接受消息。(或者可能太晚了)。

路由:

lobby_routing = [
    route('websocket.connect', ws_test_add, path=r"^/testadd/$"),
]

消费者:

def ws_test_add(message):
    print "TEST"
    message.reply_channel.send({'accept': True})
    Group("testadd").add(message.reply_channel)

设置:

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "asgi_rabbitmq.RabbitmqChannelLayer",
        "ROUTING": 'CouchGames_Backend.routing.lobby_routing',
        "CONFIG": {
            'url': 'amqp://guest:guest@localhost:5672/%2F',
        },
    },
}

日志:

2018-01-31 20:00:21,141 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
2018-01-31 20:00:21,144 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
2018-01-31 20:00:21,157 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
2018-01-31 20:00:21,157 - INFO - worker - Listening on channels http.request, websocket.connect, websocket.disconnect, websocket.receive
2018-01-31 20:00:21,163 - INFO - server - HTTP/2 support not enabled (install the http2 and tls Twisted extras)
2018-01-31 20:00:21,164 - INFO - server - Using busy-loop synchronous mode on channel layer
2018-01-31 20:00:21,164 - INFO - server - Listening on endpoint tcp:port=8000:interface=127.0.0.1
[2018/01/31 20:00:41] WebSocket HANDSHAKING /testadd/ [127.0.0.1:31404]
TEST
[2018/01/31 20:00:41] WebSocket DISCONNECT /testadd/ [127.0.0.1:31404]

最佳答案

事实证明,这可能是因为 RabbitMQ 并不适合像这样动态创建队列。所以速度太慢导致websocket超时。我切换到 Redis channel 层,现在它似乎工作完美!

关于python - Django channel 不发送回复消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48549589/

相关文章:

python - 给定函数的位置参数的名称,是否可以确定该参数的位置?

python - Sphinx add_config_value 不添加变量

c - C语言的套接字编程,服务器代码出错

java - 将捕获的图像从 Java 发送到 Android 时出错

python - 以部署用户身份通过​​结构激活 virtualenv

python - 如何在 Matplotlib TextBox 小部件中设置光标位置?

python - 自定义 python 的 ubuntu 11.04 lxml 导入 etree 问题

django - 如何修复 django_sites 表?

python - 如何覆盖 django 文件?

c++ - 如何同时使用 2 个套接字 PF_INET 和 PF_PACKET?