我正在尝试开发一个 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) {}
}
}
所以重点是服务器不应该停下来监听指定的端口。
Client Handler 是在服务器端创建的线程。
public class ClientHandler extends Thread {
private Socket incoming;
public ClientHandler(Socket incoming){
this.incoming = incoming;
}
@Override
public void run(){}
服务器将初始化的套接字发送到 ClientHandler 的构造函数并调用start()
方法来运行它。