web-dev-qa-db-ja.com

webhookとwebsocketの違い

私はいつもリアルタイムのチャットをしたいと思っていました。

私は何年も前にPHP + Ajax + Mysqlでやってきて、サーバーを壊しました。次に、Flash +でテキストファイルを試しました。私はあきらめて、10年も試していません。しかし最近、ウェブフックとウェブソケットについて聞いたことがあります。そして、それらは両方ともそれを行う方法のように思えますが、私は実際にその違いを完全には把握していません。誰でも説明できますか?

61

Webhook

Webhooks は、サーバー間通信用です。これらは、あるサーバーが別のサーバーに、何かが発生したときに特定のURLにデータを送信することを要求することによって機能します。

この記事 は、人気のあるサービスでのウェブフックのいくつかの使用について説明しています。 この組織 は、RESTful APIのコンテキストでそれらを使用することについて多くを語っています。

Websocket

Websockets は(通常)サーバーからブラウザーへの通信用です。サーバーはWebsocketサーバーをホストし、クライアントはそのサーバーへの接続を開くことができます。これは、 long-polling / [〜#〜] cometのように、問題を解決する従来の方法よりも高速でリソースを大量に消費しないため、現在人気があります。 [〜#〜]

websockets を使用して2つのサーバーを接続することは可能ですが、通常はそれらが使用されるものではありません。

混乱

これらの1つは(排他的に)サーバーサーバーで、もう1つは(ほとんど)ブラウザーサーバーですが、これらの技術は、同じ問題を解決しているように、同じ場所で議論されることがよくあります。チェーンを十分に調べてみると、どちらも「リアルタイム」通信の問題を解決していることがわかりますが、この問題のさまざまな側面を非常に異なる方法で解決しています

直接比較できる状況の1つは、サードパーティのサーバーによって消費されるAPIを構築している場合です。その場合、webhook APIまたはwebsocket APIを提供できます。両方とも、サードパーティが迅速に更新を取得できるようにします。

  • Webhookを選択した場合、そのサードパーティは、通知している変更をクライアントのブラウザーにプッシュする方法をまだ見つけ出す必要があります。
  • Websocket APIを提供する場合、サードパーティはサイトをセットアップするだけで、各ユーザーが直接websocket APIに接続し、サーバーの作業量を減らすことができます。
163
turtlemonvh

以下は、webhookとwebsocketのどちらかを選択するための追加情報です。

Websocketを介したサーバー間通信は、新世代のチャットボットアプリで一般的になっています。現在、多くのチャットボットはWebsocketを介して実行され、内部のプライベートボットに公開URLを必要としないという主な利点を提供します。この環境では、webhookとwebsocketの使用を検討する場合のガイドラインを次に示します。

Websockets

  • アプリがブラウザーアプリである場合、アプリはwebhookを受信できないため、websocketsを使用します。
  • アプリがインターネット経由でサービスからメッセージを受信するサーバーアプリであり、ファイアウォールを開きたくない場合は、websocketを検討してください。一部の企業では、このような接続を開く前に情報セキュリティのレビューが必要です。

Webhooks

  • サーバーアプリアプリで多数のサブスクリプションを作成する必要がある場合は、サーバーへの開いているWebSocket接続の量を処理する準備をしてください( 1M WebSocket接続についてはこの記事を参照 )、またはWebhookに切り替えます。いくつかの一般的なチャットボットは、スケーラビリティを改善するためにWebソケットからWebフックに移動しました。
  • サーバーアプリが(AWS Lambda、Google Cloud Functionsなど)でクラウド関数として実行される場合、アプリはwebsocket接続を開いたままにしないため、webhookを使用します。
  • サーバーアプリがHerokuの無料利用枠で実行されている場合、手動でサーバーにスリープを指示しない限り、Dynoはスリープ状態になり、1日6時間スリープする必要があるため、webhookを使用します。
8
Grokify