2

是否可以从 python 脚本运行 daphne 进程甚至只是 Django 通道?

推荐的方法是运行

daphne -b 0.0.0.0 -p 8001 django_project.asgi:channel_layer

我想知道我是否可以将它绑定到一个变量并以 Tornado 的方式运行它

from tornado.web import Application
application = Application([(r"/", RosbridgeWebSocket), (r"", RosbridgeWebSocket)])
4

3 回答 3

1

我不熟悉 Django Channels,但您是否尝试过直接使用 inmemory 或 redis Channels?你也许可以完全避免达芙妮。据我了解,daphne 似乎是协议翻译层,因此外部客户端可以通过 daphne 与 Django 通信(Django 使用 wsgi 而不是 asgi,因此 Django 无法单独处理某些协议,例如 websocket 通信)。Tornado 不依赖于 wsgi。

达芙妮测试中有例子: https ://github.com/django/daphne/blob/master/daphne/tests/test_http.py

内存 ChannelLayer 不是跨进程的。我不确定这在您的用例中是否重要。如果是这样,您可以检查其他后端(例如 redis 通道)https://channels.readthedocs.io/en/stable/backends.html

这可能是您正在寻找的更直接的内容: https ://github.com/django/asgi_redis

于 2017-03-09T08:42:20.837 回答
1

这是一种解决方法,但您可以像这样使用subprocess模块:

subprocess.run(["daphne", "-b 0.0.0.0 -p 8001 django_project.asgi:channel_layer"])

检查此线程Calling an external command in Python以获取有关使用子进程模块的更多信息。

于 2017-03-05T22:43:39.613 回答
0

你试过把龙卷风换成 NGINX 吗?

http://masnun.rocks/2016/11/02/deploying-django-channels-using-daphne/

于 2017-03-04T20:09:13.317 回答