ロングポーリングイベント
ロングポーリングイベント
Boxアカウントでアクティビティのリアルタイム通知を取得するために、OPTIONS /events
APIのロングポーリング機能を使用できます。
curl -X OPTIONS https://api.box.com/2.0/events \
-H 'Authorization: Bearer <ACCESS_TOKEN>'
EventStream stream = new EventStream(api);
stream.addListener(new EventListener() {
public void onEvent(BoxEvent event) {
// Handle the event.
}
});
stream.start();
events = client.events().generate_events_with_long_polling()
for event in events:
print('Got {0} event'.format(event.event_type))
client.events.getEventStream(function(err, stream) {
if (err) {
// handle error
}
stream.on('data', function(event) {
// handle the event
});
});
ロングポーリング
ロングポーリングでは、HTTPリクエストを開き、サーバーが応答を送信するまでそのリクエストを開いたままにして、そのプロセスを何度も繰り返して更新された応答を受信します。
ロングポーリングURL
ロングポーリングを使用するには、まず、リクエストをOPTIONS /events
APIに送信し、ロングポーリングURLを取得します。
curl -X OPTIONS https://api.box.com/2.0/events \
-H "authorization: Bearer ACCESS_TOKEN"
{
"chunk_size": 1,
"entries": [
{
"type": "realtime_server",
"url": "http://2.realtime.services.box.net/subscribe?channel=cc807c9c4869ffb1c81a&stream_type=all",
"ttl": 10,
"max_retries": 10,
"retry_timeout": 610
}
]
}
リアルタイムサーバー
次に、指定されたURLにGET
リクエストを実行してイベントのリッスンを開始します。監視対象のアカウントでイベントが発生すると、new_change
という値を持つ応答が送信されます。応答にはその他の詳細は含まれていません。
この単一の応答は、最新の既知のstream_position
を使用してGET /events
エンドポイントにリクエストを送信するなど、後続の処理を促すことを目的としています。
切断と再接続
サーバーは、この応答を送信した後に接続を閉じます。この時点でアプリケーションがイベントのリッスンを再開するには、ロングポーリングのプロセスを繰り返す必要があります。
アプリケーションがリアルタイムサーバーに接続してもその後しばらくイベントが発生しないと、接続が閉じられ、reconnect
という値が返されます。この状況になると、アプリケーションはプロセスを再開するためにOPTIONS /events
に対する新しい呼び出しを実行する必要があります。
タイムアウトと再試行
retry_timeout
で指定した秒数以内にアプリケーションがイベントを受け取らなければ、アプリケーションはリアルタイムサーバーに再接続できます。これは、ネットワークエラーが発生すると必要になる場合があります。
アプリケーションがリアルタイムサーバーに対してGET
リクエストを送信したときにmax_retries
エラーが返された場合は、/events
APIに対してOPTIONS
呼び出しを実行してプロセスを再開する必要があります。