2

まず、これは自己署名アプレットなので、パーミッションは問題ありません。
次に、アプレットが ftp サーバーにアップロードされ、.html ドキュメントで開かれます。

接続に使用するコード自体は次のとおりです。

try
{
    Class.forName("com.mysql.jdbc.Driver");
    long start = System.currentTimeMillis();
    Connection conn = DriverManager.getConnection("jdbc:mysql://the.hostname:3306/qnqdb", "username", "password");
    long end = System.currentTimeMillis();
    JOptionPane.showMessageDialog(rootPane, (end - start) + "ms.\n" + conn);
}
catch (SQLException ex)
{
    JOptionPane.showMessageDialog(rootPane, ex.getClass() + "\n" + ex.getMessage());
}

JOptionPane は、接続する DB に関係なく、127 秒 (4.5 分強) かかったことを示しています。

再度接続すると、200 ~ 2000 ミリ秒しかかかりません(通常のようです) 。

テストするために、op Wireshark も開き、ポート 3306 をリッスンしました。最初の 4 分間は何も起こりませんでした。キャプチャの画像
次に、次の 50 秒間で 28 パケットを記録しました。

奇妙なことに、アプレットをローカルで実行しているときに DB に接続すると、最初は最大 500 ミリ秒、その後は最大 200 ミリ秒しかかかりません。

私が考えているのは:

  • 2 回目から n 回目の接続は速いので、データベースの障害ではありません。
  • アプレットに何らかの障害があります。なんらかの理由でクラスのロードに時間がかかる場合があります。

重要性がある場合、アプレットからの通常のソケット接続は、ローカルでも ftp でも 20 ~ 30 ミリ秒しかかかりません。

編集
どうやら、他のコンピューターでは、それほど時間はかかりません。私が試したものでは約20秒でしたが、別のものではおそらく2〜3秒でした。
更新:確かに、時間がかかるのはこの 1 台のコンピューターだけのようです。Java コンソール レベル 5 のログ: http://pastebin.com/2u2v7gZV

4

1 に答える 1

1

Java コンソールのログをもう一度確認したところ、1 つのことに気付きました。

繰り返し続けた

network: Connecting http://shop.nordicbeads.com/Renes/mysql-connector-java-5.1.6-bin.jar with 
proxy=DIRECT network: Cache entry not found [url: http://shop.nordicbeads.com/Renes/mysql-connector-java-5.1.6-bin.jar, version: null]

何度も繰り返しますが、使用するパスが何らかの理由で ftp サーバー上のライブラリへのパスではないことに気付きました。パスは Renes/lib/library.jar であり、lib フォルダー内を参照しませんでした。
ライブラリの位置を変えたら、たったの3秒で接続できるようになりました。

奇妙なことに、これをテストした他のすべてのコンピューターがすぐに lib フォルダーに表示されるのはなぜですか。そして、なぜ私はそこを見るのに4分以上かかるのですか? HTMLドキュメントでは、lib/を前にしてアーカイブ行にライブラリを追加しましたが、それがあってもなくても違いはありません。

于 2012-07-22T15:09:22.220 に答える