【问题标题】:Is it possible to implement webhooks on regular clients?是否可以在普通客户端上实现 webhook?
【发布时间】:2014-09-11 21:48:04
【问题描述】:

我正在尝试创建一个可以连续从网络服务器接收数据的 python 应用程序。这个 python 应用程序将在多台个人计算机上运行,​​并且只要有新数据可用,它就会接收它。我意识到我可以通过长轮询或网络套接字来做到这一点,但问题是有时数据不会传输数天,在这种情况下,长轮询或网络套接字似乎效率低下。我不需要那么长的连接,但只要数据可用,我就需要能够将其推送到应用程序。我一直在阅读有关 webhook 的信息,似乎如果我可以有一个 url 来发布该数据,我就不需要轮询。但我对每个客户端如何拥有回调 url 感到困惑,因为在这种情况下,客户端必须充当服务器。有没有图书馆可以帮助完成这项工作?您可以指出我的任何类型的资源都会非常有帮助!

【问题讨论】:

    标签: python sockets real-time long-polling webhooks


    【解决方案1】:

    backchoi32,

    你想要做的是阅读REST architecture。本质上,您的客户端将对特定资源执行 POST 请求,我们将资源称为 clients。然后,您的客户可以做的是对“/:cliend_id”执行 GET 请求,当发生这种情况时,您的后端可以继续将此信息保存在您的数据库中。

    在 python 中有许多 RESTful Web 框架,其中一些流行的是 DjangoFlask

    Python 日记中的这篇名为“Creating a simple CRUD application”的文章和名为“Basic CRUD in Django”的共享幻灯片将教您编写具有基本 (C)reate (R)ead 的 RESTful Web 服务所需了解的知识(U)更新 (D)删除功能。

    您需要在客户端担心的是,确保您收到 200 status code 回复,这将向您的客户端发出信号,表明它成功执行了对您的后端服务的请求,并且如果您执行 POST/PUT 一切都被保留了。如果它没有返回 200,那么您可以添加功能来处理故障、冗余和容错。

    如果您有任何问题,请告诉我!

    【讨论】:

    • 感谢您的回答,但这与长轮询有何不同?因为我仍然会让客户端定期转到“/:cliend_id/results”以检查数据是否可用,对吗?此外,我希望后端将数据发布到客户端可以接收的 url。
    • 嘿@bachkoi32,好问题!在长轮询中,如果服务器在收到轮询时没有任何信息可供客户端使用,则服务器不会发送空响应,而是保持请求打开并等待响应信息可用。在我的建议中,您可以简单地设置您的客户定期检查他们在服务器上的资源(这可能是每小时,每 6 小时,每天),就是这样。如果可用,则将其发送给您的客户端,如果不可用,则等待下一个客户端请求。
    • 您实际上是在构建一个 pub/sub 服务,但在这种情况下,保持套接字打开的费用是不值得的,因为实际上不需要实时完成任何事情。如果您有任何其他问题,请告诉我!
    【解决方案2】:

    如果没有某种连接,就无法向客户端发送数据,例如客户端完成的 websockets 或(长)轮询。虽然理论上可以在客户端打开一个侦听器套接字并让 Web 服务器可以连接到该套接字并将数据发送到该套接字,但这在现实中是行不通的。这样做的主要原因是,客户端通常位于无法从外部访问的内部网络中,即典型的家庭设置,在单个 IP 后面有多台计算机,或者是在其间设置防火墙的公司设置。这种情况下只能建立从内到外的连接,反之则不行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-13
      • 2012-08-31
      • 2022-06-23
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多