aschannel (v2)을 사용하여 데이터 스트리밍

업데이트 됨

aschannel 은 스트리밍 엔드 포인트로서 클라이언트는 제출 된 각 작업의 결과를 실시간으로 검색 할 수 있습니다. 스트리밍 API는 연결이 무기한으로 열려 있고 사용 가능한 즉시 클라이언트에 메시지가 전송된다는 점에서 일반 API와 다릅니다.

클라이언트는 직접 ASAPI를 통해 asmaster, 또는 요청 데이터를 사용하여 하나 개 이상의 계정에 가입하고, 결과는 한 번에 사용할 수 실시간으로 클라이언트로 스트리밍됩니다.

채널에 연결하기

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 승인 모든 것이 좋습니다.
400 잘못된 요청 요청이 잘못되었습니다.
401 무단 클라이언트 토큰이 유효하지 않습니다.
503 서비스를 사용할 수 없음 aschannel 은 현재 사용할 수 없습니다 : check status.reincubate.com

스트림 해석

aschannel의 각 메시지는 헤더와 페이로드의 두 부분으로 구성됩니다. 헤더는 메시지에 대한 메타 데이터를 포함하고 페이로드에는 메시지 자체가 포함됩니다. 이것은 시스템 메시지 또는 클라이언트가 요청한 데이터 일 수 있습니다. 헤더와 페이로드는 모두 캐리지 리턴과 새 행으로 끝나며 각 데이터 앞에 다음 데이터 조각의 길이를 나타내는 숫자가 붙습니다.

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

<HEADER_LENGTH><PAYLOAD_LENGTH> 는 모두 정수이며 두 필드 모두 \r\n 포함한 다음 필드의 길이를 나타냅니다. 헤더는 항상 JSON으로 인코딩되지만 페이로드 형식은 유형에 따라 다릅니다. 결과적으로 Python을 사용하여 aschannel의 메시지를 다음과 같이 사용할 수 있습니다.

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

청크 페이로드 해석

몇 킬로바이트보다 큰 모든 페이로드는 더 작은 청크로 분할되며 클라이언트는 원래의 페이로드를 구성하기 위해 재구성해야합니다. 헤더에는 chunk , total_chunkschunk_size 라는 필드가 포함됩니다. 이러한 헤더는 단일 청크가있는 경우에도 존재할 수 있습니다.

예를 들어 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 필드에 의해 식별됩니다. 예 :

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 클라이언트가 너무 느림

재 연결 필요

채널은 클라이언트에 재 연결을 지시 할 수 있습니다. 그렇게 할 경우 클라이언트는 가능한 한 빨리 제공된 엔드 포인트에 대한 새 연결을 열어야합니다.

동시 연결

채널은 클라이언트 당 하나의 열린 연결 만 허용합니다. 클라이언트가 새 연결을 열면 이전 메시지가이 메시지와 함께 종료됩니다.

버퍼 경고

클라이언트는 제공된 속도로 메시지를 소비하지 않아 연결이 끊어 질 수 있습니다. 내부 버퍼가 메시지에 대해 보유 된 메시지의 미리 정의 된 임계 값에 도달하면 시작될 때 경고 메시지가 표시됩니다.

클라이언트가 너무 느림

이 메시지는 메시지 소비가 너무 느릴 때 연결이 종료 될 때 전송됩니다.

클라이언트에 작업 백 로그가 있고 메시지를 즉시 소비하는 경우 반복적으로 연결이 끊어 질 위험이 있으므로 많은 또는 모든 작업 결과가 손실됩니다. 클라이언트가 다시 연결되면 단절 이후 완료된 작업의 결과 만 스트리밍됩니다.

어떻게 도와 드릴까요?

지원 팀이 도와 드리겠습니다!

근무 시간은 월요일부터 금요일, 오전 9 시부 터 오후 5시 (그리니치 표준시)입니다. 시간은 현재 6:09 오후 GMT입니다.

우리는 1 일 이내에 모든 메시지에 답장하고자합니다.

지원 섹션으로 이동 › 엔터프라이즈 팀에 문의하십시오. ›
우리의 멋진 지원 팀

© 2008 - 2019 Reincubate Ltd. 판권 소유. 영국과 웨일즈에 등록 #5189175, VAT GB151788978. Reincubate®는 등록 상표입니다. 개인 정보 및 이용 약관. 우리는 2FA를 권장합니다. 런던에서 Built로 지어졌습니다.