2016-05-30 20 views
0

応答を待たずにHTTPリクエストを送信できますか?応答を待つことなくHTTPリクエスト

私はセンサからのデータのロギングを必要とするIoTプロジェクトに取り組んでいます。すべての設定には、多くのセンサーがあり、1つの中央コーディネーター(ほとんどがRaspberry Piで実装されます)がセンサーからデータを収集し、インターネットを介してサーバーにデータを送信します。

このログは毎秒発生します。したがって、データの送信はすぐに行われ、キューが大きくなりすぎないようにする必要があります。要求が応答(UDPのような)を待たない場合は、はるかに高速です。

今はパケットがほとんどなくなっても問題ありません。

また、これを実装する最善の方法を教えてください。好ましくはJavaで。

サーバー側はPHPを使用して実装されています。

ありがとうございます!

EDIT: センサーはワイヤレスですが、使用する技術はコーディネーターに送信する際の待ち時間がほとんどまたはまったくありません。このコーディネーターはインターネット経由でデータを送信する必要があります。しかし、ちょうどインターネット接続が悪いと仮定します。これはインドの遠隔地で実施される予定です。

+0

いつも非同期要求があります:https://hc.apache.org/httpcomponents-asyncclient-dev/quickstart.html。 – Chill

+0

はい、これは私の問題です。なぜなら、多くのセンサーがあるからです。各データは1秒あたりに送信されます。待ち行列が増え、本当に大きくなるでしょうか? –

+0

あなたは「火と忘れ」のような方法でUDPを使いたいですか?のように、サーバーの応答はまったく気になりますか?その場合、http://stackoverflow.com/questions/10556829/sending-and-receiving-udp-packets-using-javaが役立つかもしれません。 – Chill

答えて

1

OkHttpなどの非同期HTTPライブラリを探しています。非同期に実行されるコールバックを指定することができます(2番目のスレッドによって)。 したがって、メインスレッドは実行を継続します。

+0

はい、これは私の問題です。なぜなら、多くのセンサーがあるからです。各データは1秒あたりに送信されます。待ち行列が増え、本当に大きくなるでしょうか? –

+0

それは起こるかもしれませんが、あなたがリアルタイムの要件を持っているならば、JavaはあなたとTCPのために間違った言語です。 – Robert

+0

いいえ、最初のスレッドはログリクエストをループすることができ、すべてをすばやく送信します。これらのそれぞれは、サーバーが応答するとアクティブになるコールバックを設定し、あなたの場合は空のメソッドのように聞こえます。コールバックエントリの作成のためにサーバーが遅い場合は、少しメモリが使用される可能性がありますが、それは軽微です。 – Nerdfest

0

GET要求のTCPタイムアウトを1秒未満に設定し、スレッドのアクセスを再トリガすることができます。より多くのデバイスでより多くのスレッドを使用します。

ような何か:

HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(); 
con.setRequestMethod("GET"); 
con.setConnectTimeout(1000); //set timeout to 1 second 
if (con.getResponseCode() == HttpURLConnection.HTTP_OK) { 
    ... 
} 

スリープ1秒の残りのスレッドのアクセスは秒未満である場合。スレッドセーフなキューに結果を追加すると、結果を別のスレッドで消費することができます。例外を処理するようにしてください。

HTTPでUDPを使用することはできません.HTTPはTCPのみです。

関連する問題