【问题标题】:gunicorn + django + telegram + mqtt clientgunicorn + django + 电报 + mqtt 客户端
【发布时间】:2021-07-28 11:25:55
【问题描述】:

我们将 gunicorn 与 django 和 django-telegrambot 一起使用。我们在自己的应用程序中也有一个 MQTT 客户端。当一些 MQTT 消息到达时,我们发送 Telegram 消息,反之亦然。现在的问题是,当我们将 gunicorn 与多个 worker 一起使用时,我们有多个 MQTT 客户端,因此当 MQTT 消息到达时,我们将多次发送相同的 Telegram 消息。
当我们使用 gunicorns 预加载 worker 时,我们只有一个 MQTT 客户端,但是所有进程共享相同的 Telegram TCP 连接,我们会收到有线 SSL 错误。作为替代方案,我们可以仅在进程和多个线程上使用,但有时 MQTT 和 Telegram 消息不会被处理(idk 为什么)。
有没有办法让它运行?
可以使用 botpolling,而不是使用 webhook,但是 django-telegrambot 说:

管理命令轮询模式(一种在本地机器上运行机器人的简单方法,不推荐在生产环境中使用!)

【问题讨论】:

  • 嗨。请删除python-telegram-bot标签,这是用于同名库的;)
  • 该库在 django-telegrambot 内部使用。也许您可以回答为什么不应该在生产中使用轮询的问题?我目前认为这是我问题的唯一答案,因为我只有一个进程在执行 mqtt 和电报。

标签: django gunicorn


【解决方案1】:

我不熟悉django-telegrambot 库,所以我无法判断作者为什么选择发表这种声明(可能在 GitHub 存储库上询问......)。但是,Telegram 正式支持轮询和 webhook(请参阅here)。恕我直言,两者都有优点和缺点。 Webhooks 可能比轮询有轻微的性能优势,但也需要更多的工作来设置。轮询要求您不断获取更新,这可以被视为不利因素。 OTOH 与 webhook 你必须有一个网络服务器运行。对于中小型机器人(就用户数而言),轮询应该没问题 - 我使用轮询对我的(相当小的)机器人没有问题。

请谨慎对待,因为我远不是网络主题方面的专家。

【讨论】:

  • 可能轮询对我们的机器人来说很好,但我们还没有切换到仅在运行新命令时才执行 MQTT 处理程序的解决方案。那么我们仍然可以使用 WebHooks,但不会出现 MQTT 消息 => Telegram 消息处理程序执行 n 次的问题。
猜你喜欢
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 2017-05-10
  • 2017-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多