【问题标题】:differences between webhook and websocketwebhook 和 websocket 的区别
【发布时间】:2014-06-04 01:31:24
【问题描述】:

我一直想进行实时聊天。

几年前我在 PHP+Ajax+Mysql 中完成了这项工作,并破坏了我的服务器。然后我尝试使用 Flash+ 一个文本文件。我放弃了,10年没试过了。但最近我听说了 webhooks 和 websockets。他们似乎都是这样做的一种方式,但我并没有真正理解其中的区别。谁能解释一下?

【问题讨论】:

    标签: websocket webhooks


    【解决方案1】:

    网络钩子

    Webhooks 用于服务器到服务器的通信。它们通过一台服务器告诉另一台服务器它希望在发生某些事情时将数据发送到某个 url 来工作。

    This article 讨论了一些流行服务中 webhook 的使用。 This organization 谈了很多关于在 RESTful API 的上下文中使用它们。

    网络套接字

    Websockets(通常)用于服务器到浏览器的通信。服务器托管一个 websocket 服务器,客户端可以打开到该服务器的连接。这现在很流行,主要是因为它比旧的解决问题的方法更快,占用资源更少,比如long-polling/COMET

    它是possible to connect 2 servers using websockets,但这通常不是它们的用途。

    混乱

    尽管其中一种是(专门)服务器-服务器,另一种是(主要)浏览器-服务器,但这些技术经常在相同的地方讨论,几乎就像它们在解决相同的问题一样。如果您向上查找足够高的链,您会发现它们都解决了“实时”通信问题,但是它们以非常不同的方式解决这个问题的不同方面 .

    可能存在直接比较的一种情况是,如果您正在构建一个将由第三方服务器使用的 API。在这种情况下,您可以提供 webhook APIwebsocket API。两者都允许第三方快速获取更新:

    • 如果您选择 webhook,第三方仍然必须想办法将您告诉他们的更改推送到他们客户的浏览器。
    • 如果您提供 websocket API,第三方只需设置他们的站点,这样他们的每个用户就可以直接连接到您的 websocket API,而他们的服务器需要做的工作更少。

    【讨论】:

    • 这是一个很棒的答案!非常感谢!
    • Websockets 通常用于客户端-服务器通信,但不限于此。它们也可以用于服务器-服务器通信。
    • 在 websocket 和 webhook 中,socket 是否一直保持打开状态?钩住 10000 台服务器是否可以帮助拥抱?
    • Websockets 在会话期间保持客户端和服务器上的套接字打开(这也使服务器有状态,这使得扩展更加棘手)。 Webhook 需要一个套接字才能在服务器上保持打开状态。在客户端,套接字只为请求打开(就像任何其他 HTTP 请求一样)。 Webhook 在客户端(如果您需要在发生某些事情时通知很多服务器)或服务器(如果您需要侦听来自很多客户端的更新)上都可能很昂贵,但两者都只使用 HTTP,并且是许多可用于扩展 HTTP 服务的解决方案。
    【解决方案2】:

    这里有一些关于在 webhook 和 websocket 之间进行选择的附加信息。

    通过 websockets 的服务器到服务器通信已在新一代聊天机器人应用程序中流行起来。现在,许多聊天机器人在 websockets 上运行,提供了一个主要优势,即内部私人机器人不需要面向公众的 URL。在这种环境下,以下是有关何时考虑使用 webhook 与 websockets 的一些指南。

    网络套接字

    • 如果您的应用是浏览器应用,请使用 websockets,因为您的应用无法接收 webhook。
    • 如果您的应用程序是通过 Internet 从服务接收消息的服务器应用程序,并且您不想打开防火墙,请考虑使用 websockets。一些公司在打开此类连接之前需要进行信息安全审查。

    网络钩子

    • 如果您的服务器应用程序需要进行多次订阅,请准备好处理与您的服务器 (see this article for 1M websocket connections) 的打开 websocket 连接的数量,或者切换到 webhook。一些流行的聊天机器人已从 websocket 转移到 webhook,以提高可扩展性。
    • 如果您的服务器应用程序在(AWS Lambda、Google Cloud Functions 等)上作为云函数运行,请使用 webhook,因为您的应用程序不会保持 websocket 连接打开。
    • 如果您的服务器应用在 Heroku 免费层上运行,请使用 webhook,因为您的 Dyno 将进入睡眠状态并且每天必须睡眠 6 小时,除非您手动指示服务器进入睡眠状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2018-03-13
      • 2017-04-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多