Differences between webhook and websocket?

我一直想和你实时聊聊。

几年前我用 PHP + Ajax + Mysql 完成了这个任务,并且破坏了我的服务器。

然后我尝试用 Flash + 一个文本文件。我放弃了,十年没试过了。但是最近我听说了 webhook 和 websocket。

它们似乎都是一种方法,但我并没有真正理解其中的区别。

有人能解释一下吗?

谢谢!

58402 次浏览

网钩

Webhooks 用于服务器与服务器之间的通信。它们通过一台服务器工作,告诉另一台服务器,当发生某些事情时,它希望将数据发送到某个 URL。

这篇文章 讨论了 webhook 在流行服务中的一些用法。这个组织谈了很多关于在 RESTful API 上下文中使用它们的内容。

网络插座

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

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

The confusion

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

可能存在直接比较的一种情况是,您正在构建一个将由第三方服务器使用的 API。在这种情况下,您可以提供 webhook API网络套接字应用程序接口。两者都允许第三方快速获得更新:

  • If you choose webhooks, that third party will still have to figure out a way to push the changes you are telling them about to their client's browsers.
  • 如果你提供了一个 websocket API,第三方可以直接设置他们的站点,这样他们的每个用户都可以直接连接到你的 websocket API,而他们的服务器只需要做很少的工作。

下面是一些关于在 webhook 和 websocket 之间进行选择的附加信息。

随着新一代聊天机器人应用程序的出现,通过 websockets 进行服务器到服务器的通信已经变得非常流行。现在,许多聊天机器人在 websockets 上运行,它们提供了一个主要优势,即不需要为内部私有机器人提供面向公共的 URL。在这种环境下,下面是一些关于何时考虑使用 webhook 和 websockets 的指南。

网络插座

  • 如果您的应用程序是一个浏览器应用程序,使用 websockets,因为您的应用程序不能接收 webhook。
  • If your app is a server app receiving messages from a service over the Internet and you do not want to open your firewall, consider websockets. Some companies require information security review before opening such connections.

Webhooks

  • 如果您的服务器应用程序需要进行许多订阅,要么准备处理大量打开的 websocket 连接到您的服务器(有关1M websocket 连接,请参阅本文) ,或切换到 webhook。一些流行的聊天机器人已经从 websockets 转移到 webhook,以提高可伸缩性。
  • 如果您的服务器应用程序作为云功能运行(AWS Lambda,谷歌云功能等) ,使用 webhook,因为您的应用程序不会保持 websocket 连接打开。
  • If your server app is running on the Heroku free tier, use webhooks because your Dyno will go to sleep and must sleep for 6 hours per day, unless you manually instruct your server to sleep.

Webhooks

在 webhook 中,我们有客户端和 webhook API 提供商。客户通常会做一次性登记。在这个注册客户端定义客户端感兴趣的事件和 webhook 提供者发送更新的回调 URL。只要有事件更新,webhook 提供者就会向 url 发送包含相关信息的帖子请求。

  • Webhook 主要用于服务器与服务器之间的通信。您的客户端通过 stripe 和 stripe api 进行付款,让您的应用程序服务器成功完成付款
  • API 提供程序必须在失败的情况下处理重试策略。
  • 如果客户端公开一个端点来注册一个必须公开访问的 webhook 提供程序,那么您必须保护这个端点。
  • webhook represents a single event. A spike in events can produce a lot of noise and your server has to be capable of handling with them. What happens if you have a ton of webhooks from a bunch of different services all coming in at once? This could result in a degraded user experience or even full-blown timeouts.

网络插座

在 websocket 中,有客户端和服务器。客户端向服务器发送一个握手 http 请求。如果服务器同意使用 websocket,那么客户端和服务器将它们的通信升级为长期的 tcp 连接。通过这种连接,客户端和服务器可以进行双向通信。一个常见的用例是聊天应用程序。

  • Websocket 主要用于服务器到浏览器的通信。
  • Websocket 创建双向低延迟通信。由于客户机和服务器维护单个 tcp 连接,所以延迟非常低。除此之外,客户端和服务器都可以使用相同的通道在同一时间交换消息。
  • 因为客户端不需要发送多个请求,所以减少了 http 请求的开销。
  • 客户端负责连接。如果连接中断,他们必须处理重新连接。
  • 服务器必须处理可伸缩性的挑战。因为客户端基本上是建立一个单一的连接