我从https://github.com/andrewgodwin/channels-examples/tree/master/multichat运行了大约50个用户的代码。
它会卡住而没有任何通知。服务器没有关闭,访问日志没有什么特别的。当我停止daphne服务器(使用Ctrl + C)时,大约需要5-10分钟才能完全关闭。有时我必须运行kill命令。
当我将daphne放入supervisor中时,这很奇怪,我每隔30分钟使用crontab重新启动一次,websocket可以正常连接。它很hack但是可以正常工作。
我的配置:HAProxy =>达芙妮
daphne -b 192.168.0.6 -p 8000 yyapp.asgi:application --access-log=/home/admin/daphne.log
backend daphne
balance source
option http-server-close
option forceclose
timeout check 1000ms
reqrep ^([^\ ]*)\ /ws/(.*) \1\ /\2
server daphne 192.168.0.6:8000 check maxconn 10000 inter 5s
Debian:OVH服务器上的9.4(原始内核)。
的Python:3.6.4
达芙妮:2.2.1
频道:2.1.2
Django:1.11.15
Redis:4.0.11
我知道这个问题可能太笼统了,但是我对此真的没有想法。我尝试升级python,重新安装所有软件包,但没有成功。
答案 0 :(得分:1)
通常,Web服务器和负载平衡器对于持久连接非常不利。您需要给Haproxy明确的指示,以便它知道何时以及如何使未使用的隧道超时。
Haproxy需要跟踪四个超时:
前三个与套接字连接的初始HTTP协商阶段有关。建立连接后,仅超时隧道很重要。您将需要修改自己的应用程序的值,但是一些建议的起始值是:
在您的代码中,应该是:
backend daphne
balance source
option http-server-close
option forceclose
timeout check 1000ms
timeout client 25s
timeout connect 5s
timeout server 25s
timeout tunnel 3600s
reqrep ^([^\ ]*)\ /ws/(.*) \1\ /\2
server daphne 192.168.0.6:8000 check maxconn 10000 inter 5s
您可能需要调整其他超时时间才能获得良好的混合效果。一些可能会影响您的设置的超时-以及一些初始值-
当然,请阅读并自定义以满足您的需求。