首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django频道:一段时间后陷入困境

Django频道:一段时间后陷入困境
EN

Stack Overflow用户
提问于 2018-08-10 02:04:12
回答 1查看 968关注 0票数 1

我从https://github.com/andrewgodwin/channels-examples/tree/master/multichat为大约50个用户运行代码。

它会在没有任何通知的情况下卡住。服务器没有关闭,访问日志没有什么特殊的内容。当我停止daphne服务器(使用Ctrl+C)时,大约需要5-10分钟才能完全关闭。有时候我得去执行杀戮指令。

当我将daphne放入监控程序中时,我每30分钟使用crontab重新启动它,websocket可以正常连接。很烦人但很管用。

我的配置: HAProxy => Daphne

daphne -b 192.168.0.6 -p 8000 yyapp.asgi:application --access-log=/home/admin/daphne.log

代码语言:javascript
复制
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: 9.4 (原始内核)在OVH服务器上。

Python: 3.6.4

达芙妮: 2.2.1

频道: 2.1.2

Django: 1.11.15

Redis: 4.0.11

我知道这个问题可能过于笼统,但我真的对此一无所知。我试着升级python,重新安装所有的软件包,但是它没有工作。

EN

回答 1

Stack Overflow用户

发布于 2020-08-03 08:48:05

一般来说,web服务器和负载平衡器对于持久连接来说是非常糟糕的。您需要给how明确的指示,以便它知道何时以及如何超时未使用的隧道。

that需要跟踪四个超时:

  1. 超时客户端
  2. 超时连接
  3. 超时服务器
  4. 超时隧道

前三个与套接字连接的初始HTTP协商阶段相关。一旦建立了连接,只有超时隧道才重要。您需要修改自己的应用程序的值,但建议的一些值是:

  1. 超时客户端: 25s
  2. 超时连接: 5s
  3. 超时服务器: 25s
  4. 超时隧道:3600 s

在您的代码中,这将是:

代码语言:javascript
复制
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

你可能需要修补其他超时,以获得一个好的混合。一些可能影响您的设置的超时--以及一些起始值--是:

  1. 超时http-保持活动: 1s
  2. 超时http-请求:15 s
  3. 超时队列:30
  4. 超时停机坪:60

当然,阅读并定制以满足您的需要。

参考资料:Haproxy Websockets负载平衡

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51777924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档