【问题标题】:How many concurrent connections can django-channels handle?django-channels 可以处理多少并发连接?
【发布时间】:2019-09-19 19:23:19
【问题描述】:

我正在将 Django 频道用于聊天应用程序。此应用程序可能会在一段时间内扩展到 10 万并发用户。我想知道 Django Channels 可以处理多少个并发连接。基本上,我比较的是 XMPP 服务器,XMPP 是否是可扩展性更好的选择,还是我应该继续使用 Django 频道?

另外,我使用 redis 层作为通道层。我想知道 redis 层在某个时间点是否会成为瓶颈?

谢谢

【问题讨论】:

  • 基本上,您的问题与将用于为您的 django-channels 应用程序提供服务的实际 ASGI 服务器更相关。 Django 频道拥有自己的官方服务器 - Daphne,它在后台使用 asyncio,并且本身具有相当大的可扩展性。您还可以为您的频道应用使用替代服务器,例如 uvicorn

标签: django websocket django-channels


【解决方案1】:

ASGI(异步服务器网关接口)旨在提供支持异步的 Python Web 服务器、框架和应用程序之间的标准接口。

在 Django Channels 中,即使 Django 本身处于同步模式,它也可以异步处理连接和套接字。

Websocket 进入一个名为 Daphne 的服务器(Daphne 是用于 ASGI 和 ASGI-HTTP 的 HTTP、HTTP2 和 WebSocket 协议服务器,为支持 Django 通道而开发)可以同时处理成百上千个同时打开的连接。

websocket 上的任何事件(连接、收到消息)都会发送到通道层,这是一种先进先出队列

Django 工作进程同步地从队列中获取一条消息,对其进行处理,然后循环返回以获取另一条消息。

因此,打开的连接数会影响您运行的 Daphne 实例的数量。事件的吞吐量会影响您运行的工作人员数量。

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-28
    • 2019-01-30
    • 2017-06-05
    • 2010-12-07
    • 1970-01-01
    相关资源
    最近更新 更多