WindowsアプリケーションサーバーにインストールされているTomcat 6上で実行されているWebアプリケーションがあります。このアプリケーションは何ヶ月も働いています。しかし何らかの理由で2回発生すると、Webアプリケーションが動作しなくなりました。どちらの場合も、netstatコマンド(-anoを使用)を実行すると、Webアプリケーションがソケット接続を介して接続しているポートで、約4.000 tcp接続(TIME_WAIT状態)が示されました。WebアプリケーションからJavaソケット接続が開始され、サーバーが再起動すると再び開きます
奇妙なことはここから始まります:私はTomcatを止め、しばらくして接続が落ちる(netstatをやり直す)。私はtomcatを再起動し、これらの接続はすべてTIME_WAIT状態に戻ります!
私はこれらの接続が再開された理由を知りません。私が紛失していることは非常に明白なことかもしれません。何か案は?
ありがとうございます。
EDIT:
public void openSocketConnection() throws Exception {
socket = createSingleSocket();
socket.setSoTimeout(5000);
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF8")), true);
in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF8"));
}
/**
* Closes socket and output input streams.
*/
public void closeSocketConnection() throws IOException {
socket.close();
out.close();
in.close();
}
/**
* Writes the input to the socket and returns the output response
*
* @param input
* a String to write on the socket
* @return output a String that the socket returns
* @throws Exception
*/
public String writeReadSocket(String input) throws Exception {
openSocketConnection();
out.println(input);
logger.debug("Socket Input:" + input);
String output = in.readLine();
logger.debug("Socket output:" + output);
closeSocketConnection();
return output;
}
/**
* Method overiden by Spring. We use the method injection technique, so that we have a new socket instance in every call to openSocketConnection()
* method
*/
public abstract Socket createSingleSocket();
writeReadSocketであると呼ばれる方法であって、ここで
ソケット管理を行うコードです。
最後のメソッド(createSingleSocket)はSpringで使用されるため、openConnection()メソッドを呼び出すたびに新しいSocketインスタンスを作成できます(ちなみに、これが新しいSocketを持っているかどうかわかりませんすべての要求)。 Spring構成ファイルでは、私はこれがあります。
<!-- prototype scope is used to instantiate a new socket instance in every createSingleSocket() method call. -->
<bean id="socket" class="java.net.Socket" scope="prototype">
<constructor-arg type="String" value="${socket.url}"/>
<constructor-arg type="int" value="${socket.port}"/>
</bean>
<bean id="socketConnector" class="gr.diassa.dsjsonrpcsuite.socket.SocketConnector">
<lookup-method name="createSingleSocket" bean="socket"/>
</bean>
使用しているクライアントソケット関連のコードを投稿できますか? – Santosh