java - 聊天服务器 - 实现选项

标签 java sockets chat

我正在尝试开发一个 Java 聊天服务器。我不知道更好的解决方案是执行以下任一操作:

  1. 为每个客户端创建一个套接字并保持打开状态
  2. 在客户端应用程序中设置一个时间间隔并查询数据库以检查是否有客户端的消息。

对于这种情况,最好的方法是什么?

最佳答案

如果您想开发具有 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/

相关文章:

javascript - RoR如何使用:remote=>true and then execute javascript code提交表单

java - 在调度程序中捕获 Throwable 是一个好习惯吗?

python - 使用线程或 asycore 在 python 中群聊应用程序

sockets - 创建 TCP 连接的一般开销

java - 将 xml 输入流式传输到 sax 解析器,如何打印流式传输的 xml?

Swift - 适用于 ios 7 的 JSQMessagesViewController?

java - Spring 启动: Read Datasource properties from another property file

java - 在枚举类型中使用整数

java - 单击另一个 Jframe 中的按钮时弹出现有 Jframe

android - 登录聊天 Quickblox 后获取聊天对话框