长轮询在 Flask 里怎么写?延迟比短轮询好多少?为什么它特别吃线程?断线重连会不会丢消息?这篇用真实的 gunicorn gthread 与 gevent worker,把这些量出来。
长轮询:送达延迟中位数 1.0 ms,最大 2.2 ms 每秒短轮询:送达延迟中位数 554 ms,最大 985 ms
上一篇:请求超时;下一篇:Server-Sent Events。
gthread × 1 个 worker × 8 线程 8 个轮询在等待时,/ping 用了 2520 ms gevent × 1 个 worker 8 个轮询在等待时,/ping 用了 5 ms gevent 同时挂着 300 个等待中的轮询,/ping 用了 5 ms,整个 gunicorn(含 master)内存约 88 MB
客户端上次收到 id=1,断开期间又发布了 2、3;重新带 since=1 轮询 → 拿到的 id: [2, 3] 之后没有新消息:since=3 轮询 → 204(空),等了 1005 ms 超时返回