webhook和websocket之间的区别


85

我一直想进行实时聊天。

几年前,我已经在PHP + Ajax + Mysql中完成了工作,并破坏了服务器。然后我尝试使用Flash +一个文本文件。我放弃了,十年没有尝试过。但是最近我听说了webhooks和websockets。他们俩似乎都是这样做的一种方式,但我不太了解其中的区别。有人可以解释吗?

Answers:


226

网络挂钩

Webhook用于服务器到服务器的通信。它们通过一台服务器告诉另一台服务器,当发生某种情况时,它希望将数据发送到某个URL。

本文讨论了流行服务中Webhooks的某些用法。 该组织讨论了很多有关在RESTful API上下文中使用它们的问题。

网络套接字

Websocket(通常)用于服务器到浏览器的通信。该服务器托管一个websocket服务器,客户端可以打开与该服务器的连接。这种方法之所以受欢迎,主要是因为它比解决旧问题的较早方法(如长轮询/ COMET)更快且占用资源更少。

可以连接使用WebSockets的2台服务器,但不是通常他们是用什么。

混乱

即使其中之一是(排他地)服务器服务器,而其中之一是(主要是)浏览器服务器,但是这些技术经常在相同的地方讨论,就像它们在解决相同的问题一样。如果您对链条的查找足够高,就会发现它们都解决了“实时”通信问题,但是它们以非常不同的方式解决了该问题的不同方面

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

  • 如果您选择webhooks,则该第三方仍将不得不找出一种方法,将您要告知他们的更改推送到其客户的浏览器中。
  • 如果您提供了websocket API,则第三方可以仅设置其站点,以便他们的每个用户都直接连接到您的websocket API,并且他们的服务器要做的工作更少。

1
这是一个了不起的答案!非常感谢你!
David天宇Wong

4
Websocket通常用于客户端-服务器通信,但不仅限于此。它们也可以用于服务器之间的通信。
2014年

在websocket和webhook中,套接字是否一直保持打开状态?钩上10000个服务器会减少拥抱吗?
Thellimist

3
Websocket在会话过程中在客户端和服务器上都保持套接字打开(这也使服务器处于有状态,这使得扩展更加棘手)。Webhook需要一个套接字才能在服务器上保持打开状态。在客户端上,仅为该请求打开套接字(就像其他任何HTTP请求一样)。无论是在客户端(如果您需要在发生某些事情时通知大量服务器)上还是在服务器上(如果您需要侦听许多客户端的更新),Webhooks都可能很昂贵,但是两者都只使用HTTP,并且许多可用于扩展HTTP服务的解决方案。
turtlemonvh

16

这是在Webhooks和Websockets之间进行选择的一些其他信息。

通过websocket进行服务器到服务器的通信已随着新一代chatbot应用程序的普及而流行。现在,许多聊天机器人都在Websocket上运行,其主要优点是内部私有机器人不需要公开的URL。在这种环境下,以下是有关何时考虑使用Webhooks和Websockets的一些准则。

网络套接字

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

网络挂钩

  • 如果您的服务器应用程序应用程序需要进行大量订阅,则可以准备处理到服务器的打开的Websocket连接量(有关1M websocket连接请参阅此文章),或切换到Webhooks。一些流行的聊天机器人已从websockets转移到webhooks,以提高可伸缩性。
  • 如果您的服务器应用程序在(AWS Lambda,Google Cloud Functions等)上作为云功能运行,请使用webhooks,因为您的应用程序不会使websocket连接保持打开状态。
  • 如果您的服务器应用程序在Heroku免费层上运行,请使用webhooks,因为Dyno会进入睡眠状态,并且每天必须睡眠6个小时,除非您手动指示服务器进入睡眠状态。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.