在负载均衡器后面运行 daphne 的多个实例:django-channels

2024-01-02

我在用django-channels to add HTTP2 & WebSocket支持我的申请。我找不到很多关于如何扩展通道的文档。下面是我的nginx负载平衡多个实例的配置daphne运行在同一台机器但不同的端口上。这是正确的方法吗?

upstream socket {
    least_conn;
    server 127.0.0.1:9000;
    server 127.0.0.1:9001;
    server 127.0.0.1:9002;
    server 127.0.0.1:9003;
}

server {
    listen 80;
    server_name 127.0.0.1;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /home/niscp/home-screen;
    }

    location /nicons/ {
        root /home/niscp/home-screen;
    }

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/home/niscp/home-screen/home-screen.sock;
    }

    location /ws/ {
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_pass http://socket;
    }
}

除此之外,我正在运行单个实例workers通过以下方式收听各个频道:

python manage.py runworker --only-channels=websocket.connect
python manage.py runworker --only-channels=websocket.receive
python manage.py runworker --only-channels=websocket.disconnect

我有uwsgi处理所有http请求的方式django通常会处理它们。全部daphne and workers做的是处理WebSocket要求。 这是一种可行的扩展方法吗django-channels,或者有什么我可以做得更好的吗?


这里有一些事情。首先,我认为在不同进程中运行不同类型的请求不会带来太多好处。您的断开连接处理程序可能会非常轻 - 除了清理之外不会做太多事情。连接可能也不会做太多事情,而接收将获得大部分负载。

您正在押注使用 --threads 参数并启动多个线程。您当前的设置只会为每种类型的处理程序运行一个线程。

runworker 的工作方式是通过通道层(例如 Redis)与 Daphne 进行通信。所有的工作人员都在监听队列。当请求到来时,一名工作人员将处理它。当该工作人员正在处理请求时,其他工作人员将等待后续请求并处理它们。一旦他们发送了响应,他们就会回去监听队列。如果没有指定 --only-channels ,每个进程都会拉出请求并尽快处理它们,并且没有一个进程会等待。

您可以通过运行多个进程和 --threads 参数来找到线程/工作线程的最佳平衡。您还可以为繁忙的频道保留工作人员,这样他们就不会破坏您的网站。

拥有多个 Daphne 实例会有所帮助。但由于它们所做的只是在您的服务器和工作人员之间发送消息,因此您可能看不到运行 4 个它们的好处。

这里开始的一切不适用于 Channels 2。这是针对旧版本的 Django Channels。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在负载均衡器后面运行 daphne 的多个实例:django-channels 的相关文章

随机推荐

  • 重命名数据库中的所有表

    我有一个数据库 其中所有表都以一组相同的字符为前缀 这样做是因为它们曾经位于一个为宠物项目设置的共享数据库中 其中包含数百个其他表 应用程序以及数据库现在已准备好脱离该阶段并准备独立运行 我想删除每个表的前缀 有没有比右键单击并单独重命名每
  • 更改 nginx 上的标头“Django 管理”文本

    我跟着这个问题 https stackoverflow com questions 4938491 django admin change header django administration text更改我的 django 管理面板标
  • 根据表格数据找到每个部门的第三个最高工资

    我需要找出3rd maximum salary对于一个员工 对于一个部门的每个部门table if no 3rd maximum salary存在然后显示2nd maximum salary if no 2nd maximum salary
  • 如何从电子邮件地址获取 SMTP 服务器

    我想通过特殊的电子邮件帐户自动发送邮件 但现在 我只知道电子邮件地址 电子邮件受保护 cdn cgi l email protection和密码 那么你知道如何获取 SMTP 服务器吗 下面是我的 C 代码 SmtpClient clien
  • Perl:何时释放不需要的标量内存而不超出范围?

    我有一个应用程序 可以将大量文本数据读取为标量 有时甚至是 GB 大小 我用substr在该标量上将大部分数据读取到另一个标量中 并将提取的数据替换为空字符串 因为第一个标量中不再需要它 我最近发现 Perl 没有释放第一个标量的内存 但它
  • 单击时,循环遍历每个对象键

    我还在学习 JS 有些东西比其他人更难理解 就像这样 我试图通过允许用户单击自定义按钮来更改谷歌地图的主题 我正在使用 if else 效果很好 但我想添加更多主题并使用循环 用户每次单击时 都会选择 object key 0 then c
  • 从 C++ 调用 DLL 中的函数

    我在 VS 2008 中有一个解决方案 其中有 2 个项目 一个是用 C 编写的 DLL 另一个是从空白项目创建的简单 C 控制台应用程序 我想知道如何从应用程序调用 DLL 中的函数 假设我从一个空白的 C 项目开始 并且我想调用一个名为
  • 打印所有定义的变量和值

    这只是为我提供了已定义变量的数组 但没有打印出任何变量 我怎样才能打印值 另外我可以使用什么函数以这种格式输出所有定义的变量 变量名称 变量类型 int array string bool 在线定义变量 脚本中定义的变量 使用次数可变 变量
  • 了解并发.futures.Executor.map()

    我正在尝试使用进程并行化一些Python代码concurrent futures https docs python org 3 library concurrent futures html 看起来我可以通过以下方式多次并行执行一个函数提
  • Windows 服务启动/停止另一个服务

    我用 C 编写的服务有一个小问题 该服务本身运行正常并且在 SYSTEM 帐户下运行 在一个执行点期间 我必须启动或停止另一项服务 然而 这是行不通的 致电给OpenService 返回错误代码 5 即 访问被拒绝 提供更多细节 我必须启动
  • 列表到字典

    我有一个List
  • 如何在 SQL Server 中选择连续重复项

    我想从 SQL Server 表中选择重复的条目 但前提是 id 是连续的 我一直在努力扭转这个答案 https stackoverflow com a 3298645 1778169满足我的需要 但我无法让它工作 上面的答案是针对Orac
  • AudioKit - 如何从麦克风获取实时 floatChannelData?

    我是 Audiokit 的新手 我正在尝试对来自麦克风的输入音频进行一些实时数字信号处理 我知道我想要的数据在AKAudioFile的FloatChannelData中 但是如果我想实时获取这个数据怎么办 我目前正在使用 AKMicroph
  • 通过门户从 Azure Cosmos DB 删除所有/多个文档

    是否可以通过 azure 门户 Azure cosmos SQL 查询或 power shell 脚本删除集合中的所有 多个可用文档 根据我的经验 删除所有文档的最快方法是将容器上的 生存时间 设置为 1 秒 这将删除所有文档 但请注意 此
  • 验证 CSS 选择器

    有没有办法以编程方式检查 javascript jquery 选择器的有效性 like class还好但是 class is not 以 JavaScript 或任何后端语言编程 除了通过 jQuery 源代码 所以在伪代码中 def se
  • Maven2 和 Swing 项目:构建并运行 swing 应用程序

    我试图找到有关如何使用 Maven 构建和运行 swing 应用程序的信息 但找不到任何有用的信息 maven 文档一团糟 有人可以指出我相关的文档吗 有人在 Swing 开发中使用 Maven 吗 我猜您想从 Maven 命令运行您的应用
  • 控制 Facebook iFrame 应用程序父框架的滚动位置

    我已经有一个 Facebook iFrame 应用程序愉快地启动并运行 但我意识到由于跨域问题 我没有办法处理父框架的滚动位置 如果用户在页面上点击太远 我无法将它们弹出到顶部 有没有人有幸使用 Facebook JS 库或其他 JavaS
  • 如何更改内容安全策略指令以允许 addThis 小部件?

    我正在制作一个使用 webpack 的网站 我正要启动它并且我想穿上addThis分享小部件 我正在添加addThis代码在index html按照建议关闭正文标签之前addThis 像这样 这会在 chrome inspect 控制台中生
  • 如何以编程方式为 WCF 服务设置单个端点

    我试图允许用户配置 WCF 服务 包括该服务侦听的 IP 和端口号 用户有一个单独的配置应用程序 允许设置这些值 但我遇到的问题是 app config 必须定义一个端点才能创建新的 ServiceHost 条目 但我的端点正在被在单独的配
  • 在负载均衡器后面运行 daphne 的多个实例:django-channels

    我在用django channels to add HTTP2 WebSocket支持我的申请 我找不到很多关于如何扩展通道的文档 下面是我的nginx负载平衡多个实例的配置daphne运行在同一台机器但不同的端口上 这是正确的方法吗 up