Soracom

Users

ドキュメント

利用可能な通信プロトコル

デバイスから Funnel のエントリポイントにデータを送信する際に利用可能なプロトコルの一覧です。

  • TCP
  • UDP
  • HTTP

以下、各プロトコルについてより詳細に解説します。

HTTP 

HTTP の POST リクエストによって送信されたデータを 1 つのデータとしてクラウドサービスに送信します。

リクエスト 

リクエストフォーマットは通常の POST メソッドに準じます。許容される Content-Type ヘッダは以下の 3 種類です。

  • application/json
  • text/plain
  • application/xml

レスポンス 

送信されたリクエストに基づいて以下のようなレスポンスがデバイスに返されます。レスポンス送信のタイミングは、クラウドサービスへのメッセージの送信に基づきます。

  • エントリポイントへのデータ送信送信成功
    • HTTP Status Code: 204
  • 不正な JSON を送信した場合 (データ形式に JSON を指定している場合のみ)
    • HTTP Status Code: 400:
    • Body: {"message":"Invalid JSON is send to funnel."}
  • 許容されない Content-Type ヘッダが送信された場合
    • HTTP Status Code: 415
    • Body: Supported Content-Type are 'application/json', 'text/plain' and 'application/xml'. Given: 指定した Content-Type
  • 送信データサイズが SORACOM Funnel の許容量を超えていた場合
    • HTTP Status Code: 413
    • Body: Maximum content-length is: 800000 (数値は許容量、単位=バイト (2017 年 12 月現在) )

以下、送信するデータの形式に 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
  • 不正な JSON を送信した場合 (データ形式に JSON を指定している場合のみ)
    • Body: 400 Invalid JSON is send to funnel.
    • なお、本エラーが発生した場合、エラーメッセージのあとに FIN フラグ付きの TCP パケットがサーバー側 (Funnel からクライアントへ) 送信されます。

以下、送信するデータの形式に 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
  • 不正な JSON を送信した場合 (データ形式に JSON を指定している場合のみ)
    • Body: 400 Invalid JSON is send to funnel.
    • なお、本エラーが発生した場合、エラーメッセージのあとに FIN フラグ付きの TCP パケットがサーバー側 (Funnel からクライアントへ) 送信されます。

以下、送信するデータの形式に JSON を選択した場合のデータ送信例です。

# UDPクライアントを起動してエントリポイントとの接続確認
$ 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.