webhook 和 websocket 之间 的 区别 ?

r1zhe5dt  于 2022-11-11  发布在  其他
关注(0)|答案(3)|浏览(633)

我一直想做实时聊天。
我几年前就用PHP+ AJAX +Mysql做过,结果服务器坏了。
然后我尝试用Flash+一个文本文件。我放弃了,10年没试过了。但最近我听说了webhook和websockets。
这两种方法似乎都可以做到这一点,但我真的不太明白其中的区别。
有人能解释吗?
谢谢你!

gr8qqesn

gr8qqesn1#

网钩

Webhooks用于服务器到服务器的通信。它们的工作原理是一个服务器告诉另一个服务器,当发生什么事情时,它希望将数据发送到某个URL。
This article讨论了webhook在流行服务中的一些用法。This organization讨论了很多关于在RESTful API上下文中使用它们的内容。

Web套接字

Websockets(通常)用于服务器到浏览器的通信。服务器托管一个WebSocket服务器,客户端可以打开到该服务器的连接。这一点现在很流行,主要是因为它比以前的解决问题的方法(如long-polling/COMET)更快,占用资源更少。
它是possible to connect 2 servers using websockets,但这通常不是它们的用途。

困惑#

即使其中一个(专门)是服务器-服务器,另一个(主要)是浏览器-服务器,这些技术经常在相同的地方讨论,几乎就像它们在解决相同的问题。如果你把链条往上看,你会发现它们都解决了“真实的”通信的问题,但是***它们以非常不同的方式解决了这个问题的不同方面***。
一种可能存在直接比较的情况是,如果您正在构建一个将由第三方服务器使用的API。在这种情况下,您可以提供 webhook APIWebSocket API。这两种API都允许第三方快速获得更新:

  • 如果你选择webhook,第三方仍然需要想办法把你告诉他们的修改推送到他们客户端的浏览器上。
  • 如果你提供了一个WebSocket,第三方可以设置他们的网站,这样他们的每个用户都可以直接连接到你的websocketAPI,他们的服务器可以做更少的工作。
kadbb459

kadbb4592#

下面是一些关于在webhook和websockets之间进行选择的附加信息。
通过websockets进行服务器到服务器的通信已经成为新一代聊天机器人应用的流行。现在,许多聊天机器人通过websockets运行,提供了一个主要的优势,即不需要为内部的、私有的机器人提供面向公众的URL。在这种环境下,下面是一些关于何时考虑使用webhook与websockets的指导方针。

网络套接字

  • 如果您的应用是浏览器应用,请使用websockets,因为您的应用无法接收webhook。
  • 如果您的应用是通过互联网接收来自服务的消息的服务器应用,并且您不想打开防火墙,请考虑使用websockets。有些公司要求在打开此类连接之前进行信息安全审查。
    网钩
  • 如果你的服务器应用需要订阅很多内容,要么准备好处理大量打开的WebSocket连接到你的服务器(see this article for 1M websocket connections),要么切换到webhook。一些流行的聊天机器人已经从websockets转移到webhook来提高可扩展性。
  • 如果您的服务器应用在(AWS Lambda、Google Cloud Functions等)上作为云功能运行,请使用webhook,因为您的应用不会保持WebSocket连接打开。
  • 如果您的服务器应用在Heroku免费层上运行,请使用webhook,因为您的Dyno将进入睡眠状态,并且每天必须睡眠6小时,除非您手动指示服务器进入睡眠状态。
iklwldmw

iklwldmw3#

网钩

在webhook中,我们有客户端和webhook api提供者。客户端通常会做一次注册。在这个注册中,客户端定义了客户端感兴趣的事件和webhook提供者发送更新的回调url。每当有事件更新时,webhook提供者会向url发送包含相关信息的post请求。

  • Webhook主要用于服务器与服务器之间的通信,客户端通过stripe进行支付,stripe api通知应用服务器支付成功。
  • API提供者必须在失败的情况下处理重试策略。
  • 如果客户端公开了一个端点,以向必须可公开访问的webhook提供程序注册,则必须保护此端点。
  • webhook代表单个事件。事件的峰值可能会产生大量噪音,您的服务器必须能够处理这些噪音。如果您同时从一堆不同的服务中接收到大量webhook,会发生什么情况?这可能会导致用户体验下降,甚至导致全面超时。

Web套接字

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

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

相关问题