聊天服务器 - 实施选项

时间:2013-07-14 15:27:36

标签: java sockets chat

我正在尝试开发Java聊天服务器。我不知道更好的解决办法是做以下任何一种:

  1. 为每个客户创建一个套接字并保持打开状态
  2. 在客户端应用程序中设置间隔并查询数据库以检查是否存在客户端的消息。
  3. 这种情况最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

如果您想开发支持UI的应用程序,建议您学习Serialization。此外,您必须为每个客户端创建一个套接字,尤其是在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(){}

Server会将初始化的套接字发送到ClientHandler的构造函数中,并调用start()方法来运行它。

答案 1 :(得分:1)

实际上,您不必为每个客户保持永久连接!您所要做的就是存储客户端的状态服务器端,然后通过任何连接进行通信。然后,当您的客户端似乎暂时不活动时,您可以更加明智地使用它们。