Unterschiede zwischen Webhook und Websocket

85

Ich wollte schon immer einen Echtzeit-Chat machen.

Ich habe das vor Jahren in PHP + Ajax + MySQL gemacht und meinen Server kaputt gemacht. Dann habe ich mit Flash + eine Textdatei ausprobiert. Ich habe aufgegeben und es seit 10 Jahren nicht mehr versucht. Aber kürzlich habe ich von Webhooks und Websockets gehört. Und beide scheinen ein Weg zu sein, aber ich verstehe den Unterschied nicht wirklich. Kann jemand erklären?

David 天宇 Wong
quelle

Antworten:

229

Webhooks

Webhooks dienen der Server-zu-Server-Kommunikation. Sie arbeiten mit einem Server, der einem anderen Server mitteilt, dass Daten an eine bestimmte URL gesendet werden sollen, wenn etwas passiert.

Dieser Artikel beschreibt einige Verwendungen von Webhooks in beliebten Diensten. Diese Organisation spricht viel darüber, sie im Kontext von RESTful-APIs zu verwenden.

Websockets

Websockets sind (normalerweise) für die Kommunikation zwischen Server und Browser vorgesehen. Der Server hostet einen Websocket-Server, und Clients können eine Verbindung zu diesem Server herstellen. Dies ist heute vor allem deshalb beliebt, weil es schneller und weniger ressourcenintensiv ist als ältere Methoden zur Lösung des Problems, wie z. B. Long Polling / COMET .

Es ist möglich, 2 Server über Websockets zu verbinden , aber dafür werden sie normalerweise nicht verwendet.

Die Verwirrung

Obwohl einer davon (ausschließlich) Server-Server und einer (meistens) Browser-Server ist, werden diese Technologien häufig an denselben Stellen diskutiert, fast so, als würden sie dieselben Probleme lösen. Wenn Sie die Kette hoch genug nachschlagen, sehen Sie, dass beide das Problem der "Echtzeit" -Kommunikation lösen, aber lösen verschiedene Aspekte dieses Problems auf sehr unterschiedliche Weise lösen .

Eine Situation, in der möglicherweise ein direkter Vergleich stattfindet, besteht darin, dass Sie eine API erstellen, die von einem Server eines Drittanbieters verwendet wird. In dieser Situation können Sie eine Webhook-API oder eine bereitstellen . In beiden Fällen kann der Dritte schnell Updates erhalten:

  • Wenn Sie sich für Webhooks entscheiden, muss dieser Dritte noch einen Weg finden, um die Änderungen, über die Sie ihn informieren, auf die Browser seines Kunden zu übertragen.
  • Wenn Sie eine Websocket-API bereitstellen, kann der Dritte seine Site einfach so einrichten, dass jeder Benutzer eine direkte Verbindung zu Ihrer Websocket-API herstellt und seine Server weniger Arbeit leisten müssen.
turtlemonvh
quelle
1
Das ist eine großartige Antwort! Vielen Dank!
David 天宇 Wong
4
Websockets werden üblicherweise für die Client-Server-Kommunikation verwendet, sind jedoch nicht darauf beschränkt. Sie können auch für die Server-Server-Kommunikation verwendet werden.
Pithikos
Bleibt der Socket sowohl im Websocket als auch im Webhook ständig geöffnet? Stellt das Einbinden von 10000 Servern das Umarmen wieder her?
Thellimist
3
Websockets lassen einen Socket sowohl auf dem Client als auch auf dem Server für die Dauer der Konversation offen (dies macht die Server auch statusbehaftet, was die Skalierung schwieriger macht). Für Webhooks ist ein Socket erforderlich, um auf dem Server geöffnet zu bleiben. Auf dem Client wird der Socket nur für die Anforderung geöffnet (genau wie bei jeder anderen HTTP-Anforderung). Webhooks können sowohl auf dem Client (wenn Sie viele Server benachrichtigen müssen, wenn etwas passiert) als auch auf dem Server (wenn Sie Updates von vielen Clients abhören müssen) teuer sein, aber beide verwenden nur HTTP und das sind Viele Lösungen zur Skalierung von HTTP-Diensten verfügbar.
Turtlemonvh
17

Hier finden Sie einige zusätzliche Informationen zur Auswahl zwischen Webhooks und Websockets.

Die Kommunikation von Server zu Server über Websockets ist bei einer neuen Generation von Chatbot-Apps populär geworden. Viele Chatbots, die über Websockets ausgeführt werden, bieten den Hauptvorteil, dass für interne, private Bots keine öffentlich zugängliche URL erforderlich ist. In dieser Umgebung finden Sie im Folgenden einige Richtlinien, wann Sie Webhooks oder Websockets verwenden sollten.

Websockets

  • Wenn Ihre App eine Browser-App ist, verwenden Sie Websockets, da Ihre App keine Webhooks empfangen kann.
  • Wenn Ihre App eine Server-App ist, die Nachrichten von einem Dienst über das Internet empfängt, und Sie Ihre Firewall nicht öffnen möchten, ziehen Sie Websockets in Betracht. Einige Unternehmen benötigen vor dem Öffnen solcher Verbindungen eine Überprüfung der Informationssicherheit.

Webhooks

  • Wenn Ihre Server-App-App viele Abonnements abschließen muss, müssen Sie entweder darauf vorbereitet sein, das Volumen offener Websocket-Verbindungen zu Ihrem Server zu verarbeiten ( 1M-Websocket-Verbindungen finden Sie in diesem Artikel ), oder zu Webhooks wechseln. Einige beliebte Chatbots sind von Websockets zu Webhooks gewechselt, um die Skalierbarkeit zu verbessern.
  • Wenn Ihre Server-App als Cloud-Funktion ausgeführt wird (AWS Lambda, Google Cloud-Funktionen usw.), verwenden Sie Webhooks, da Ihre App die Websocket-Verbindung nicht offen hält.
  • Wenn Ihre Server-App auf der kostenlosen Heroku-Ebene ausgeführt wird, verwenden Sie Webhooks, da Ihr Dyno in den Ruhezustand wechselt und 6 Stunden pro Tag in den Ruhezustand versetzt werden muss, es sei denn, Sie weisen Ihren Server manuell an, in den Ruhezustand zu wechseln.
Grokify
quelle