デバイスから Funnel のエントリポイントにデータを送信する際に利用可能なプロトコルの一覧です。
- TCP
- UDP
- HTTP
以下、各プロトコルについてより詳細に解説します。
HTTP
HTTP の POST リクエストによって送信されたデータを 1 つのデータとしてクラウドサービスに送信します。
リクエスト
リクエストフォーマットは通常の POST メソッドに準じます。許容される Content-Type
ヘッダは以下の 3 種類です。
application/json
text/plain
application/xml
レスポンス
送信されたリクエストに基づいて以下のようなレスポンスがデバイスに返されます。レスポンス送信のタイミングは、クラウドサービスへのメッセージの送信に基づきます。
- エントリポイントへのデータ送信成功
- HTTP Status Code:
204
- HTTP Status Code:
- 不正な JSON を送信した場合 (データ形式に JSON を指定している場合のみ)
- HTTP Status Code:
400
: - Body:
{"message":"Invalid JSON is send to funnel."}
- HTTP Status Code:
- 送信データサイズが SORACOM Funnel の許容量を超えていた場合
- HTTP Status Code:
413
- Body:
Maximum content-length is: 800000
(数値は許容量、単位=バイト (2017 年 12 月現在) )
- HTTP Status Code:
以下、送信するデータの形式に JSON を選択した場合のデータ送信例です。
$ curl -v -d "{\"key\":\"value\"}" -H "Content-Type: application/json" http://funnel.soracom.io
* Rebuilt URL to: http://funnel.soracom.io/
* Trying 100.127.65.43...
* Connected to funnel.soracom.io (100.127.65.43) port 80 (#0)
> POST / HTTP/1.1
> Host: funnel.soracom.io
> User-Agent: curl/7.49.0
> Accept: */*
> Content-Type: application/json
> Content-Length: 15
>
* upload completely sent off: 15 out of 15 bytes
< HTTP/1.1 204 No Content
< Date: Tue, 06 Dec 2016 16:19:37 GMT
< Connection: keep-alive
TCP
TCP 上で送信されたデータをクラウドサービスに送信します。
リクエスト
基本的には 1 つの TCP セグメントを 1 つのメッセージとしてクラウドに送信します。しかし、連続した 2 つ以上の TCP セグメントが 1 つのメッセージとして取り扱われる場合もありますのでご注意ください。
大きなデータを送信しようとする場合、伝送路の MTU によってデータは複数の TCP セグメントにフラグメンテーションされます。この結果としてそれぞれの TCP セグメントが別々のメッセージとしてクラウドサービスに転送されることに注意してください。
レスポンス
TCP には HTTP のようなリクエスト&レスポンスの概念はありませんので、下記の Body に記述されているコードやメッセージをペイロードとして含んだ TCP パケットが Funnel のエントリポイントからクライアントに対して送信されます。レスポンス送信のタイミングは、クラウドサービスへのメッセージの送信に基づきます。
- 送信成功
- Body:
200
- Body:
- 不正な JSON を送信した場合 (データ形式に JSON を指定している場合のみ)
- Body:
400 Invalid JSON is send to funnel.
- なお、本エラーが発生した場合、エラーメッセージのあとに FIN フラグ付きの TCP パケットがサーバー側 (Funnel からクライアントへ) 送信されます。
- Body:
以下、送信するデータの形式に JSON を選択した場合のデータ送信例です。
# Funnel のエントリポイントとの TCP セッションの確立
$ nc -v funnel.soracom.io 23080
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif en0
src 192.168.43.232 port 51053
dst 100.127.65.43 port 23080
rank info not available
TCP aux info available
Connection to funnel.soracom.io port 23080 [tcp/*] succeeded!
# JSONを送信
(request) {"key":"value"}
(response) 200
# 不正なJSONを送信
(request) bad text
(response) 400 Invalid JSON is send to funnel.
UDP
送信された TCP の 1 パケット (厳密には UDP データグラム) を 1 つのデータとしてクラウドサービスに送信します。
リクエスト
1 メッセージあたりの最大送信データサイズは 1 つの UDP データグラムで送信できるペイロード長と等しくなります。
レスポンス
UDP には HTTP のようなリクエスト&レスポンスの概念はありませんので、下記の Body に記述されているコードやメッセージをペイロードとして含んだ UDP パケットが Funnel のエントリポイントから送信されます。レスポンス送信のタイミングは、クラウドサービスへのメッセージの送信に基づきます。
- 送信成功
- Body:
200
- Body:
- 不正な JSON を送信した場合 (データ形式に JSON を指定している場合のみ)
- Body:
400 Invalid JSON is send to funnel.
- なお、本エラーが発生した場合、エラーメッセージのあとに FIN フラグ付きの TCP パケットがサーバー側 (Funnel からクライアントへ) 送信されます。
- Body:
以下、送信するデータの形式に JSON を選択した場合のデータ送信例です。
# UDP クライアントを起動して Funnel のエントリポイントとの接続確認
$ nc -v -u funnel.soracom.io 23080
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src 192.168.43.232 port 61136
dst 100.127.65.43 port 23080
rank info not available
# 接続成功。ncは接続確認のためにUDPデータグラムを送信する。(データ形式にJSONを指定している場合、それフォーマットエラーが返ってくる。(が、問題なし))
Connection to funnel.soracom.io port 23080 [udp/*] succeeded!
(response) 400 Invalid JSON is send to funnel.
(response) 400 Invalid JSON is send to funnel.
(response) 400 Invalid JSON is send to funnel.
(response) 400 Invalid JSON is send to funnel.
# JSONを送信
(request) {"key":"value"}
(response) 200
# 不正なJSONを送信
(request) bad text
(response) 400 Invalid JSON is send to funnel.