我一直想做一个实时聊天.
我几年前在PHP + Ajax + Mysql中完成了这项工作并破坏了我的服务器.然后我尝试使用Flash +文本文件.我放弃了,并没有在10年内尝试过.但最近我听说过webhooks和websockets.他们似乎都是一种方法,但我并没有完全掌握其中的差异.谁能解释一下?
Webhooks用于服务器到服务器的通信.它们由一个服务器工作,告诉另一个服务器,当发生某些事情时,它希望将数据发送到某个URL.
本文讨论了流行服务中webhooks的一些用途. 该组织在RESTful API的上下文中讨论了很多使用它们.
的WebSocketsWebsockets(通常)用于服务器到浏览器的通信.服务器托管websocket服务器,客户端可以打开与该服务器的连接.这很受欢迎,主要是因为它比旧的解决问题的方法更快,资源占用更少,如长轮询/COMET.
它可以连接使用WebSockets的2台服务器,但不是通常他们是用什么.
混乱即使其中一个是(专门)服务器 - 服务器,一个(主要是)浏览器 - 服务器,这些技术通常在同一个地方讨论,几乎就像他们解决相同的问题.如果你查看链条足够高,你会发现它们都解决了"实时"通信的问题,但它们以非常不同的方式解决了这个问题的不同方面.
可能存在直接比较的一种情况是,您是否正在构建将由第三方服务器使用的API.在这种情况下,您可以提供webhook API或websocket API.两者都允许第三方快速获得更新:
如果您选择webhooks,那么第三方仍然需要找到一种方法来推送您告诉他们客户浏览器的更改.
如果您提供websocket API,第三方可以设置他们的站点,以便他们的每个用户直接连接到您的websocket API,他们的服务器必须做更少的工作.
以下是一些在Webhooks和Websockets之间进行选择的信息。
通过websocket进行服务器到服务器的通信已被新一代的聊天机器人应用程序所普及。现在,许多聊天机器人都在websocket上运行,其主要优点是不需要内部私有机器人使用面向公众的URL。在这种环境下,以下是有关何时考虑使用Webhooks和Websockets的一些准则。
网络套接字
如果您的应用是浏览器应用,请使用websockets,因为您的应用无法接收webhook。
如果您的应用程序是服务器应用程序,并且希望通过Internet从服务接收消息,而又不想打开防火墙,请考虑使用websocket。一些公司在打开此类连接之前需要信息安全审查。
网络挂钩
如果您的服务器应用程序应用程序需要进行大量订阅,则可以准备处理到服务器的打开的Websocket连接数量(请参阅此文章以了解1M websocket连接),或切换到Webhooks。一些流行的聊天机器人已从websockets转移到webhooks,以提高可伸缩性。
如果您的服务器应用程序在(AWS Lambda,Google Cloud Functions等)上作为云功能运行,请使用webhooks,因为您的应用程序不会使websocket连接保持打开状态。
如果您的服务器应用程序在Heroku免费层上运行,请使用webhooks,因为Dyno会进入睡眠状态,并且每天必须睡眠6个小时,除非您手动指示服务器进入睡眠状态。