aschannel(v2)を使ってデータをストリーミングする

更新しました

aschannelはストリーミングエンドポイントで、クライアントは送信された各タスクの結果を生成時にリアルタイムで取得できます。ストリーミングAPIは、接続が無期限に開かれ、メッセージが使用可能になるとすぐにクライアントに送信されるという点で、通常のAPIと異なります。

クライアントは、ASAPI経由で直接asmaster、またはリクエストデータを使用して、1つのまたは複数のアカウントに加入し、その結果が、一度利用できるリアルタイムにクライアントにストリーミングされます。

チャンネルに接続する

次のコマンドを使用して、 aschannelに接続することができます。

$ curl \
    -X GET \
    -H "Authorization: Token <TOKEN>" \
    -d "stream=<STREAM>" \
    https://aschannel.reincubate.com/stream/

<TOKEN>はクライアントのトークン、 <STREAM>はクライアントのストリームIDです。このIDは、タスクが送信されたときにasapiエンドポイントによって提供され、クライアントのトークンに関連付けられた定数値です。

HTTPレスポンスコードのトラブルシューティング

aschannelに接続する 、HTTPレスポンスコードがレスポンスヘッダで送信されます。以下の表はそれらの意味を説明しています。

状態テキスト説明
200 OK すべて順調。
400 要求の形式が正しくありませんリクエストは不正です。
401 未承認クライアントトークンが無効です。
503 サービスは利用できません aschannelは現在ご利用いただけません:status.reincubate.comを確認してください

ストリームの解釈

aschannelからの各メッセージは、ヘッダーとペイロードという2つの部分に分けられます。ヘッダーにはメッセージに関するメタデータが含まれ、ペイロードにはメッセージ自体が含まれています。これはシステムメッセージ、またはクライアントが要求したデータです。ヘッダーとペイロードの両方がキャリッジリターンと新しい行で終わり、それぞれの後ろに続くデータの長さを示す番号が付きます。

<HEADER_LENGTH>\r\n
<HEADER>\r\n
<PAYLOAD_LENGTH>\r\n
<PAYLOAD>\r\n

<HEADER_LENGTH><PAYLOAD_LENGTH>はどちらも整数であり、どちらも\r\n を含む次のフィールドの長さを表します。ヘッダーは常に JSONエンコードされてますが、ペイロード形式はそのタイプによって異なります。その結果、 aschannelからのメッセージをPythonで消費することができます。

buf = response.raw
while not buf.closed:
    header_length = buf.readline()
    header = buf.read(header_length)
    payload_length = buf.readline()
    payload = buf.read(payload_length)

    handle_payload(header, payload)

最初の接続では、応答はこれに似たものになり、接続は開いたままになります。

66
{ "type": "system",
  "id": "cff35e74-c709-4374-348e-03ea9a2cee61"}
45
{ "message": "Message streaming has begun."}

ここで、 6645は、それぞれヘッダー長とペイロード長です。別の端末から同じキーで再接続するとこれが得られます。

66
{ "type": "system",
  "id": "ad17c5a5-c658-4736-876e-cf7901be7292"}
155
{ "message": "A new HTTP connection has been opened using your your authentication details, culling old connections.",
  "error": "CULLING_OLD_CONNECTIONS"
}

チャンクペイロードの解釈

数キロバイトを超えるペイロードは、小さなチャンクに分割され、クライアントは元のペイロードを形成するために再構築する必要があります。ヘッダは、名前のフィールドが含まれますchunktotal_chunks 、およびchunk_size 。これらのヘッダは、チャンクが1つしかない場合でも存在する可能性があります。

例として、 loginタスクの結果をまとめると、以下のような出力になります。

123
{ "chunk": 1,
  "total_chunks": 1,
  "type": "log-in",
  "task_id": "2a24db6c-6870-4a27-a45a-a5c172d8ec98",
  "chunk_size": 16384
}
51
{ "message": "Log-in successful",
  "success": true
}

タスク結果の受け取り

以下は、 icloudサービスのfetch_dataタスクからのメッセージ応答の例です。

137
{ "stream": "<STREAM>",
  "task_id": "<TASK_ID>",
  "chunk": 1,
  "total_chunks": 1,
  "chunk_size": 16384,
  "type": "<PAYLOAD_TYPE>"
}
288
{ "sms": [{
    "conversation_id": "+447910000000",
    "from_me": false,
    "handle": "vodafone",
    "attachments": [],
    "deleted": false,
    "type": "SMS",
    "date": "2016-09-16 11:52:53.000000",
    "text": "Welcome to Vodafone!",
    "group_handles": null,
    "id": 1
  }]
}

ここで、 <TASK_ID>は、タスクがサブミットされたときにasapiによって指定されたのと同じ<TASK_ID>です。 <PAYLOAD_TYPE>はペイロードの性質を記述し、 asapi経由で送信されたアクションのslugを使用して記述されます。

システムメッセージを受信する

時々、 ricloudはシステムメッセージをクライアントに送信する必要があるかもしれません。これらは常にsystemに設定されているヘッダのtypeフィールドによって識別されsystem 。例えば:

16
{ "type": "system"
}
97
{ "code": "client-too-slow",
  "message": "The client is reading data too slowly. Disconnecting."
}

以下のシステムメッセージcode値が考えられます。

応答概要
reconnect 再接続が必要です
CULLING_OLD_CONNECTIONS 同時接続
WARNING_SLOW_CONNECTION バッファ警告
CLOSING_SLOW_CONNECTION クライアントが遅すぎる

再接続が必要です

クライアントは提供されたエンドポイントへの新しい接続をできるだけ早く開く必要がある場合、チャネルはクライアントに再接続するように指示することができます。

同時接続

クライアントが新しい接続を開く場合、チャネルはクライアントごとに1つの開いた接続しか許可しません、古いものはこのメッセージで殺されます。

バッファ警告

提供されている速度でメッセージを消費しないためにクライアントを切断することができます。それらが遅れているなら、内部バッファがそれらのために保持されている彼らのメッセージの40%の事前定義されたしきい値に達した時から始めて、それらは警告されるでしょう。

クライアントが遅すぎる

このメッセージは、メッセージの消費が遅すぎるときに接続が終了したときに送信されます。

クライアントにタスクのバックログがあり、すぐにメッセージを消費すると、クライアントは繰り返し切断され、その結果多くのタスク結果またはすべてのタスク結果が失われる危険があります。クライアントが再接続すると、切断後に完了したタスクからの結果のみがストリーミングされます。

どのように我々は助けることができます?

サポートチームがお手伝いします!

営業時間は月曜日から金曜日の午前9時から午後5時(GMT)です。 時間は現在 12:13 AM GMTです。

1営業日以内に、お返事を差し上げます。メールアドレスはこちら。

サポートセクションに移動 › エンタープライズチームに連絡する ›
私たちの素晴らしいサポートチーム

© 2008 - 2019 Reincubate Ltd. 無断複写・転載を禁じます。 イングランドとウェールズに登録 #5189175, VAT GB151788978. Reincubate®は登録商標です。 プライバシーと利用規約. マルチファクタ認証をお勧めします。 ロンドンで愛と建てられた。