1

import javax.xml.ws.Endpointを使用してWebサービスを作成し、Service.createとservice.getPortを使用してそれに接続するクライアントを作成しました。これで、少量の接続のみを使用する場合、すべてが完全に正常に機能します...

しかし、-Webサービスへの1000の同時接続(クライアント)を起動すると、次の「時々」が発生します。

com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused: connect
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused: connect
... then it works ...
... works again ...
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused: connect
com.sun.xml.internal.ws.client.ClientTransportException: HTTP transport error: java.net.ConnectException: Connection refused: connect
... works ...
... works ...

(あなたはアイデアを得る)

しかし、これは一貫していません...だから私は疑問に思っています...制限はありますか?(JDKが提供する軽量HTTPサーバーを使用しています)

4

1 に答える 1

1

厳しい制限はありませんが、接続数は確かに制限されています。ハードウェアとOSに応じて、制限は数百の同時接続から数千まで変化する可能性があります。

エンドポイントに接続すると、組み込みのHTTPServerが接続を受け入れ、ハンドラーに渡します。着信要求が速すぎる場合、HTTPServerはこれらの接続をキューに入れてバックログを作成する必要があります。バックログは限られています。この制限に達すると、新しい接続が拒否され、クライアントにエラーが表示されます。

このようなことを行うことで、バックログを増やすことができます。

   server = HttpServer.create(address, 128);

これによりエラーが遅れる可能性がありますが、サーバーがダイジェストできるよりも速くリクエストを送信すると、最終的にエラーが発生します。

于 2009-11-24T04:25:34.317 に答える