我有一个Django频道项目。我目前正在使用
ASGI / Channels版本2.1.7开发服务器
当我启动服务器并使用浏览器连接到服务器时,HTTP请求立即开始得到响应,并且HTML页面加载到浏览器中。页面加载后,它会尝试建立一个websocket连接,该连接将失败。
我正在使用reconnecting-websocket库,因此它不断尝试并失败。我看到它失败了,因为在firefox控制台中有消息说连接尝试失败。刷新页面无济于事。大约30-45秒后,它开始工作。那时,只要我保持开发服务器运行,我的websocket就会出现零问题-当我加载使用它们的页面时,它们总是立即连接。
问题并不总是会出现(有时可以立即解决),但是如果没有解决,则总是在启动开发服务器后的前30-45秒。每次我需要重新启动开发服务器时,在开发过程中必须等待30-45秒是非常烦人的事情。
服务器上的tcpdump显示Websocket请求通过适当的目标端口进入,但获得了TCP RST。失败的连接尝试根本不会显示在开发服务器日志中(打印在屏幕上的日志)。 Linux似乎由于套接字繁忙或其他原因而放弃了请求。奇怪的是,即使HTTP请求没有被丢弃,但websocket请求却被丢弃,即使它们都使用相同的端口。
有人有什么想法吗?有人遇到这个吗?我可以在Linux或开发服务器上启用任何其他调试功能?
编辑:使用nginx和daphne进行部署,我没有问题。 systemd一旦启动了nginx和daphne,在我的树莓派上只花了大约3秒钟,我就可以加载页面,并且Web套接字可以完美连接。只有开发服务器有问题。