1

freebsd サーバーで投稿をリッスンする Java Socket サーバーを構築しました。

Server クラスはポートをリッスンし、接続を受け入れます。すべての新しい接続は ServerManager に送信され、リストに保存され、それを反復処理して新しいデータをチェックします。反復は無限に行われますwhile loop

サーバーを数日実行した後、サーバーが強制終了されたことに気付きました。何が殺したのかわからない。メモリとリソースが不足しているときにAndroidがプロセスを処理するように、システムがそれを強制終了した可能性はありますか? これを回避する方法はありますか?たぶん、何らかの「ウォッチドッグ」を作成して、殺された場合に再起動しますか?

4

1 に答える 1

0

getInputStream().available() > 0 の場合、それを処理するために新しいスレッドを実行します

これは正しくありません。(a) 必要ではなく、(b) ゼロの場合はどうなりますか? 受け入れられたソケットのスレッドを生成し、ブロッキング読み取りを使用して入力ストリームを処理し、終了したらすべてを閉じます (つまり、read() が -1 を返すか、例外がスローされたとき)。

受け入れループは、新しいスレッドに渡すことを除いて、受け入れられたソケットで何もするべきではありません。

于 2012-09-27T00:34:41.223 に答える