我正在尝试开发一个 Java 聊天服务器。我不知道更好的解决方案是执行以下任一操作:
- 为每个客户端创建一个套接字并保持打开状态
- 在客户端应用程序中设置一个时间间隔并查询数据库以检查是否有客户端的消息。
对于这种情况,最好的方法是什么?
最佳答案
如果您想开发具有 UI 支持的应用程序,我建议您学习序列化
。此外,您必须为每个客户端创建一个套接字,尤其是在服务器端。服务器应该有线程,您可以调用客户端处理程序
来处理客户端的请求。查询数据库来检查收到的消息是没有意义的,但您也许可以将所有消息保存在数据库中。我的建议是,如果您要使用数据库(我建议这样做),请使用它来处理客户的注册过程。因此,每当客户端向服务器发送登录请求时,线程都会检查该客户端是否已经在数据库中拥有帐户。如果没有,您可以实现一个简单的注册表单。从逻辑上讲,每个客户都会有一个 friend 列表
,您应该将它们保存在数据库中。
编辑:服务器将如下所示。
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()
方法来运行它。
关于java - 聊天服务器 - 实现选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17640781/