有没有可能从python脚本运行一个daphne进程或者仅仅是Django通道?
建议的方法是运行
daphne -b 0.0.0.0 -p 8001 django_project.asgi:channel_layer
我想知道我是否可以把它绑定到一个变量上,然后像龙卷风那样运行它
from tornado.web import Application
application = Application([(r"/", RosbridgeWebSocket), (r"", RosbridgeWebSocket)])
4条答案
按热度按时间hlswsv351#
这是一种变通方法,但您可以像这样使用子流程模块:
subprocess.run(["daphne", "-b 0.0.0.0 -p 8001 django_project.asgi:channel_layer"])
查看此线程在Python中调用外部命令以获取有关使用子进程模块的更多信息。
arknldoa2#
我对Django通道不太熟悉,但是你有没有尝试过直接使用inmemory或者redis通道?你也许可以完全避免使用daphne。据我所知,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
bnl4lu3b3#
你试过把龙卷风换成NGINX吗?
http://masnun.rocks/2016/11/02/deploying-django-channels-using-daphne/
20jt8wwn4#
我遇到了同样的问题...
应该可以了。问题是我在任何地方都没有看到这个文档,所以API可能不是很稳定。
这与通过子进程调用Daphne的代码路径相同:https://github.com/django/daphne/blob/main/daphne/cli.py#L167https://github.com/django/daphne/blob/main/daphne/cli.py#L204