質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

Q&A

解決済

1回答

2002閲覧

Java サーバーへPOST 遅延を限りなく失くす方法について

Clover

総合スコア13

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Azure

Azureは、マイクロソフトのクラウド プラットフォームで、旧称は Windows Azureです。PaaSとIaaSを組み合わせることで、 コンピューティング・ストレージ・データ・ネットワーキング・アプリケーションなど多くの機能を持ちます。

0グッド

0クリップ

投稿2017/05/26 09:09

JavaFXでサーバーと接続して、受信したデータを処理するプログラムを組んでいます。
サーバーは、Azure WebアプリのStandard: 1 Sプランを利用しています。

サーバーへTESTとPOSTします。
String returnValues = executePost("TEST");

test.phpは送信された値がTESTの場合は、指定のデータベースより一番新しい値を取得して、echoにて表示します。
(データベースは違うプログラムより常時更新しています。)

returnValuesにサーバーより受信したデータが入るので、そのデータによって指定の処理を行います(SeleniumのGoogle Chromeのあるサイト内のボタンをクリック)。

スレッド内にて0.01秒おきにexecutePostメゾッドを実行しています。
ですが、たまに1秒ほど指定の処理(サイト内をクリック)が遅れます。
回線の問題やパソコンのスペックの問題もあるかと思いますが、下記のexecutepost処理の最適化が可能でしたら、ご教授して頂けますと幸いです。

また、スレッドで数秒おきに処理をするプログラムにおいて、何か注意点等がありましたら教えて頂けますと幸いです。

よろしくお願い致します。

Java

1 private static String executePost(String Values) { 2 String line = ""; 3 4 try { 5 URL url = new URL("http://xxxx.azurewebsites.net/test.php"); // Admin 6 HttpURLConnection connection = null; 7 8 try { 9 connection = (HttpURLConnection) url.openConnection(); 10 connection.setDoOutput(true); 11 connection.setUseCaches(false); 12 //connection.setChunkedStreamingMode(0); 13 connection.setRequestMethod("POST"); 14 15 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), StandardCharsets.UTF_8)); 16 writer.write("value="); 17 writer.write(Values); // 本来は左のValuesの値が送信される 18 writer.flush(); 19 20 if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { 21 try (InputStreamReader isr = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8); 22 BufferedReader reader = new BufferedReader(isr)) { 23 line = reader.readLine(); 24 } 25 } 26 } finally { 27 if (connection != null) { 28 connection.disconnect(); 29 } 30 } 31 } catch (IOException e) { 32 e.printStackTrace(); 33 System.exit(1); 34 } 35 36 return line; 37 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

「たまに発生する」ということは、GCが動いているのかもしれませんね。
jconsoleでメモリ使用状況を確認していてはどうでしょうか。

gcを明示的に呼び出して実行してみるのが一つの手と思いますが、
0.01秒置きとなるとgcのせいで0.01秒に収まらなくなることもあるかもしれません。
となると、ヒープの初期値と最大値を多くとっておいて…となるような気がします。
JavaVMをチューニングするような感じになると思います。

投稿2017/06/05 17:50

Hiroshi-Aoki

総合スコア804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問