- ベストアンサー
getOutputStream()の取得が遅い
- サーバーAからサーバーBへのデータ送信にgetOutputStream()を使用しているが、処理が遅い。
- サーバーAとサーバーBは同じLAN内にあり、名前の解決は問題ないと思われる。
- ボトルネックはgetOutputStream()の実行にかかる時間であり、データの通り道を作成する処理に原因がある可能性がある。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
URLConnection のAPI仕様の最初の方には、 「3. connect メソッドを使用して、リモートオブジェクトへの実際の接続を確立する 」 という記述があり、connect メソッドの項には 「接続されていることに依存する操作は、必要に応じて暗黙的に接続を実行します 」 とあります。 http://java.sun.com/javase/ja/6/docs/ja/api/java/net/URLConnection.html ですから、実際にコネクションが張られるのは con.getOutputStream() の時点になるでしょう。名前解決に関しての記述は見当たりませんが、実際にコネクションが張られる時点で行う実装になっていると見るのが妥当でしょう。 職場の方の言うとおり、名前の解決に時間がかかっているという線も考えられますね。 getOutputStream の前に明示的に connect を呼び出すようにすれば、接続関係に時間が掛かっているのか、OutputStream の取得自体に時間が掛かっているのか切り分けられるかと。
その他の回答 (2)
- wormhole
- ベストアンサー率28% (1626/5665)
正引きは行われてないでしょうが逆引きが行われてるのではないでしょうか。
補足
ご回答ありがとうございます。 逆引きを行うのに時間がかかっているとすれば hostsの設定でドメイン名とIPの関係を明示的に書いて試して 見ようかと思います。
- root139
- ベストアンサー率60% (488/809)
> ただ、接続先のURLを 192.168.1.15 というように > プライベートIPで直接指定しているのですが > こういう場合も名前の解決って行われるもののでしょうか。 サーバーAで実行するときはIPアドレスを記述しているのですね。見落としてました。 ご指摘の通り、IPアドレスを直接指定している場合は、そもそも名前を使っていないので名前解決は行われようが無いですね。
補足
ご回答ありがとうございます。 今すぐに試せる環境にはないのですが ご指摘のconnectを呼び出してみて接続まわりなのか OutputStreamの取得なのか試してみたいと思います。 ただ、接続先のURLを 192.168.1.15 というようにプライベートIPで 直接指定しているのですがこういう場合も名前の解決って行われる ものなのでしょうか。