Diffusion de données avec aschannel (v2)

Mis à jour

aschannel est un noeud final de diffusion en continu qui permet aux clients de récupérer les résultats de chaque tâche soumise, en temps réel, au fur et à mesure qu'ils sont générés. Les API de streaming diffèrent des API normales en ce sens qu'une connexion est maintenue ouverte indéfiniment et que les messages sont envoyés au client dès qu'ils deviennent disponibles.

Les clients s'abonnent à un ou plusieurs comptes en utilisant asmaster , ou demandent des données directement via asapi , et les résultats seront transmis au client en temps réel, une fois qu'ils seront disponibles.

Connexion au canal

Une connexion à aschannel peut être établie à l'aide de la commande suivante:

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

<TOKEN> est le jeton du client et <STREAM> l'ID de flux du client. Cet ID est fourni par le noeud final asapi lorsqu'une tâche est soumise. Il s'agit d'une valeur constante liée au jeton du client.

Dépannage des codes de réponse HTTP

Lors de la connexion à aschannel, un code de réponse HTTP sera envoyé dans l'en-tête de la réponse. Le tableau ci-dessous décrit leurs significations.

Statut Texte La description
200 D'accord Tout va bien.
400 Mauvaise Demande La demande est mal formée.
401 Non autorisé Le jeton client n'est pas valide.
503 Service indisponible aschannel est actuellement indisponible: vérifiez status.reincubate.com

Interpréter le flux

Chaque message de aschannel est divisé en deux parties: un en-tête et une charge utile. L'en-tête contient des métadonnées sur le message, tandis que les données utiles contiennent le message lui-même. Cela peut être un message système ou les données demandées par le client. L'en-tête et la charge utile se terminent par un retour chariot et une nouvelle ligne, chacun d'eux étant précédé d'un nombre indiquant la longueur de la donnée suivante.

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

<HEADER_LENGTH> et <PAYLOAD_LENGTH> sont des entiers et représentent tous les deux la longueur du champ suivant, y compris le \r\n . L'en-tête est toujours codé JSON, mais le format de la charge utile varie en fonction de son type. Par conséquent, on pourrait consommer des messages de l’ aschannel avec Python comme ceci:

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)

Lors de la première connexion, la réponse ressemblera à ceci et la connexion restera ouverte:

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

Ici, 66 et 45 sont respectivement la longueur de l'en-tête et la longueur de la charge utile. La reconnexion avec la même clé depuis un autre terminal donnera ceci:

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"
}

Interprétation des charges utiles tronquées

Toute charge utile supérieure à quelques kilo-octets sera fractionnée en morceaux plus petits qu'un client doit réassembler pour former la charge initiale. Les en-têtes contiennent des champs nommés chunk , total_chunks et chunk_size . Ces en-têtes peuvent être présents même s'il n'y a qu'un seul bloc.

Par exemple, un résultat tronqué pour une tâche de login produira un résultat comme ci-dessous:

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
}

Réception des résultats de la tâche

Voici un exemple de réponse au message d'une tâche fetch_data sur le service icloud :

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
  }]
}

Ici, le <TASK_ID> est le même <TASK_ID> donné par asapi lorsque la tâche a été soumise. Le <PAYLOAD_TYPE> décrit la nature de la charge utile et sera décrit à l'aide du slug de l'action soumise via asapi .

Recevoir des messages système

De temps en temps, ricloud peut avoir besoin de transmettre des messages système au client. Celles-ci sont toujours identifiées par le champ de type d'en-tête défini sur system . Par exemple:

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

Les valeurs de code message système suivantes sont possibles:

Réponse Résumé
reconnect Reconnexion requise
CULLING_OLD_CONNECTIONS Connexion simultanée
WARNING_SLOW_CONNECTION Avertissement de tampon
CLOSING_SLOW_CONNECTION Client trop lent

Reconnexion requise

Le canal peut demander au client de se reconnecter, le cas échéant, il doit ouvrir une nouvelle connexion au point final fourni dès que possible.

Connexion simultanée

Le canal n'autorise qu'une seule connexion ouverte par client. Si un client ouvre une nouvelle connexion, l'ancienne sera supprimée avec ce message.

Avertissement de tampon

Les clients peuvent être déconnectés s'ils ne consomment pas les messages au rythme auquel ils sont fournis. Ils seront avertis s’ils prennent du retard, à partir du moment où le tampon interne atteint un seuil prédéfini de 40% des messages retenus pour eux.

Client trop lent

Ce message est envoyé lorsque la connexion est terminée lorsque la consommation de messages est trop lente.

Si le client a un arriéré de tâches et consomme facilement des messages, il risque de se déconnecter de façon répétée, ce qui entraîne la perte de nombreux résultats, voire de tous les résultats. Une fois qu'un client s'est reconnecté, ils ne recevront plus que les résultats des tâches terminées après la déconnexion.

Comment pouvons nous aider?

Notre équipe de support est là pour vous aider!

Nos bureaux sont ouverts du lundi au vendredi, de 9 h à 17 h GMT. L’heure est actuellement 12:42 Matin GMT.

Notre objectif est de répondre à tous les messages en un jour ouvrable.

Aller à la section support › Contacter l'équipe de l'entreprise ›
Notre superbe équipe de support

© 2008 - 2019 Reincubate Ltd. Tous droits réservés. Enregistré en Angleterre et au Pays de Galles #5189175, VAT GB151788978. Reincubate® est une marque déposée. Confidentialité et modalités. Nous recommandons l'authentification multi-facteurs. Construit avec à Londres.