webhook和websocket之间的区别

webhook和websocket之间的区别,websocket,webhooks,Websocket,Webhooks,我一直想做一个实时聊天 几年前,我在PHP+Ajax+Mysql中就这样做了,并破坏了我的服务器。然后我尝试使用Flash+文本文件。我放弃了,十年没试过了。但最近我听说了Webhook和WebSocket。它们似乎都是实现这一目标的一种方式,但我并不完全理解其中的区别。有人能解释吗?Webhooks 用于服务器到服务器的通信。它们的工作原理是一台服务器告诉另一台服务器,它希望在发生某些事情时将数据发送到某个url 讨论Webhook在流行服务中的一些用途。讨论了在RESTful API的上下文

我一直想做一个实时聊天

几年前,我在PHP+Ajax+Mysql中就这样做了,并破坏了我的服务器。然后我尝试使用Flash+文本文件。我放弃了,十年没试过了。但最近我听说了Webhook和WebSocket。它们似乎都是实现这一目标的一种方式,但我并不完全理解其中的区别。有人能解释吗?

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

讨论Webhook在流行服务中的一些用途。讨论了在RESTful API的上下文中使用它们的很多内容

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

是的,但这通常不是它们的用途

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

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

  • 如果您选择webhooks,第三方仍然需要找到一种方法将您告诉他们的更改推送到他们的客户端浏览器上
  • 如果您提供websocket API,第三方只需设置他们的站点,让他们的每个用户直接连接到您的websocket API,他们的服务器所需的工作量就会减少

这里有一些额外的信息,可以在Webhook和WebSocket之间进行选择

在新一代聊天机器人应用程序中,通过WebSocket进行服务器到服务器的通信变得很流行。现在,许多聊天机器人通过websockets运行,提供了一个主要优势,即内部、私有机器人不需要面向公众的URL。在这个环境中,下面是关于使用WebHooxvs WebSoCuffs时的一些指导原则。 WebSocket

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

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

这是一个很棒的答案!非常感谢你!WebSocket通常用于客户机-服务器通信,但不限于此。它们也可以用于服务器通信。在websocket和webhook中,套接字是否始终保持打开状态?挂接1万台服务器会导致拥抱吗?WebSocket会在会话期间保持客户端和服务器上的套接字打开(这也会使服务器有状态,这使得扩展更加棘手)。Webhook需要一个套接字在服务器上保持打开状态。在客户机上,套接字仅为请求打开(就像任何其他HTTP请求一样)。Webhook在客户端(如果您需要在发生事件时通知许多服务器)或服务器(如果您需要侦听来自许多客户端的更新)上都可能非常昂贵,但两者都只使用HTTP,并且有许多可用于扩展HTTP服务的解决方案。