webhookとwebsocketの違い


86

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

私はその数年前にPHP + Ajax + MySQLで実行し、サーバーを壊しました。次に、Flash +でテキストファイルを試してみました。私はあきらめて、10年間試していません。しかし最近、私はWebhookとWebSocketについて聞いた。そして、どちらもそれを行う方法のようですが、私はその違いを完全には理解していません。誰でも説明できますか?

回答:


236

Webhook

Webhookは、サーバー間通信用です。これらは、あるサーバーが別のサーバーに、何かが起こったときに特定のURLにデータを送信するように指示することで機能します。

この記事では、人気のあるサービスでのWebhookの使用法について説明します。 この組織は、RESTfulAPIのコンテキストでそれらを使用することについて多くのことを話します。

Websocket

Websocketは、(通常)サーバーからブラウザーへの通信用です。サーバーはWebSocketサーバーをホストし、クライアントはそのサーバーへの接続を開くことができます。これは主に、ロングポーリング/ COMETなどの古い方法よりも高速でリソースを大量に消費しないため、人気があります。

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

混乱

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

直接比較できる状況の1つは、サードパーティのサーバーによって使用されるAPIを構築している場合です。そのような状況では、webhookAPIまたはwebsocketAPIを提供できます。どちらも、サードパーティが更新をすばやく取得できるようにします。

  • Webhookを選択した場合でも、そのサードパーティは、伝えている変更をクライアントのブラウザにプッシュする方法を考え出す必要があります。
  • WebSocket APIを提供する場合、サードパーティはサイトを設定するだけで、各ユーザーがWebSocket APIに直接接続し、サーバーの作業が少なくて済みます。

1
それは素晴らしい答えです!どうもありがとうございました!
デビッド天宇ウォン2014

4
Websocketは一般的にクライアント/サーバー通信に使用されますが、これに限定されません。サーバー間通信にも使用できます。
ピティコス2014

WebSocketとWebhookの両方で、ソケットは常に開いたままですか?10000台のサーバーをフックするとハグが発生しますか?
テリミスト2015年

3
Websocketは、会話の間、クライアントとサーバーの両方でソケットを開いたままにします(これにより、サーバーがステートフルになり、スケーリングがより難しくなります)。Webhookは、サーバー上で開いたままにするためにソケットを必要とします。クライアントでは、ソケットはリクエストに対してのみ開かれます(他のHTTPリクエストと同様)。Webhookは、クライアント(何かが起こったときに多くのサーバーに通知する必要がある場合)またはサーバー(多くのクライアントからの更新をリッスンする必要がある場合)の両方で高価になる可能性がありますが、どちらもHTTPを使用するだけです。 HTTPサービスのスケーリングに利用できる多くのソリューション。
turtlemonvh 2015年

18

WebhookとWebSocketのどちらかを選択するための追加情報を次に示します。

WebSocketを介したサーバー間通信は、新世代のチャットボットアプリで人気が高まっています。現在、多くのチャットボットはWebSocket上で実行され、内部のプライベートボットに公開URLを必要としないという主な利点があります。この環境で、WebhookとWebSocketの使用を検討するタイミングに関するガイドラインを次に示します。

Websocket

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

Webhook

  • サーバーアプリアプリで多数のサブスクリプションを作成する必要がある場合は、サーバーへの開いているWebSocket接続の量を処理する準備をするか(1M WebSocket接続についてはこの記事を参照)、Webhookに切り替えます。一部の人気のあるチャットボットは、スケーラビリティを向上させるためにWebSocketからWebhookに移行しました。
  • サーバーアプリがクラウド関数(AWS Lambda、Google Cloud Functionsなど)として実行されている場合、アプリはWebSocket接続を開いたままにしないため、Webhookを使用します。
  • サーバーアプリがHerokuの無料利用枠で実行されている場合は、Webhookを使用してください。サーバーに手動でスリープするように指示しない限り、Dynoはスリープ状態になり、1日6時間スリープする必要があります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.