Java チャット サーバーを開発しようとしています。より良い解決策が次のいずれかを行うことであるかどうかはわかりません。
- クライアントごとにソケットを作成し、開いたままにします
- クライアント アプリケーションで間隔を設定し、データベースにクエリを実行して、クライアントへのメッセージがあるかどうかを確認します。
この状況で最善の方法はどれですか?
Serialization
UI をサポートするアプリケーションを開発する場合は、学習することをお勧めします。Server
さらに、特にサイドでクライアントごとにソケットを作成する必要があります。client handler
また、サーバーには、クライアントの要求を処理するために呼び出すことができるスレッドが必要です。受信したメッセージを確認するためにデータベースに問い合わせても意味がありませんが、すべてのメッセージをデータベースに保存することはできます。私のアドバイスは、データベースを使用する場合 (私はそれをお勧めします)、クライアントの登録プロセスを処理するために使用することです。そのため、クライアントがログインのためにサーバーにリクエストを送信するたびに、スレッドはそのクライアントがデータベースにアカウントを持っているかどうかをチェックします. そうでない場合は、単純な登録フォームを実装できます. 論理的には、すべてのクライアントにはfriend list
、データベースに保持する必要があるものがあります。
編集: サーバーは次のようになります。
public class Server {
public static void main(String[] args) {
try {
ServerSocket s = new ServerSocket(8087);
System.out.println("Server Started");
while (true) {
Socket incoming = s.accept();
System.out.println(incoming.getInetAddress().getHostAddress() + " was connected!");
new ClientHandler2(incoming).start();
}
} catch (Exception e) {}
}
}
したがって、主なポイントは、サーバーは指定されたポートをリッスンするために停止するべきではないということです。
サーバー側で作成されたスレッドであるクライアントハンドラー。
public class ClientHandler extends Thread {
private Socket incoming;
public ClientHandler(Socket incoming){
this.incoming = incoming;
}
@Override
public void run(){}
サーバーは、初期化されたソケットを ClientHandler のコンストラクターに送信し、start()
メソッドを呼び出してそれを実行します。