java - 与多个客户端的 ServerSocket 连接

标签 java sockets

各位。我是网络编程的新手,遇到了以下问题。我需要编写一种可以同时与多个客户端保持连接的服务器。我写的内容如下:

类:

public class Main {
    public static void main(String args[]) throws Exception{
        ConnectionUtils.waitForClients();
    }
}

ConnectionUtils 类:

public class ConnectionUtils {

    private static ServerSocket server; 

    static{
        try {
            server = new ServerSocket(54321);
        } catch (Exception e) {
        }
    }

    private static Runnable acceptor = new Runnable() {
        @Override
        public void run() {
            try {
                Client c = new Client(server.accept());
                new Thread(acceptor).start();
                c.sendLine("Hello client \n");
            } catch (Exception e) {
            }
        }
    };

    public static void waitForClients(){
        Thread clientAcceptor = new Thread(acceptor);
        clientAcceptor.start();
    }
}

它或多或少是有效的。但这种方法的缺点是什么?我怀疑他们有太多缺点,但我无法捕捉到他们。

最佳答案

问题在于您创建了无限数量的线程,其中线程是昂贵的资源。您应该使用 ThreadPool 来限制程序中创建的线程数量。 考虑使用 Executors 而不是使用此低级代码 In Oracle documentation about Executors, there is an example similar to what you doing. Check it out!

关于java - 与多个客户端的 ServerSocket 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26947559/

相关文章:

java - 从命令提示符编译 java 源代码时出现找不到符号错误?

java - 如何将 webapp 打包为可部署的 war ?

java - 将我现有的服务器连接到 GCM

java - 使用 @XMLJavaTypeAdapters 解码 JAXB

java - Bash - 通过搜索整个系统来查找 java 类及其 jar 目录

javascript - 如何让用户通过在 url 中输入房间名称来进入特定房间?套接字.io

c - 使用 TCP 与 Fortran 进行进程间通信 (IPC)

c++ - ZeroMQ——尝试在 C++ 中运行 asyncsrv 时为 "Socket operation on non-socket"

c++ - 用于线程间通信的 Windows 套接字

javax.inject 不存在