node.js回调是否模仿java accept套接字?

node.js回调是否模仿java accept套接字?,java,node.js,sockets,Java,Node.js,Sockets,不久前,我在node.js中编写了一些代码,我使用了套接字的魔力来实现我想要的 io.sockets.on("connection", function(socket){ //code }); 我从这段代码中了解到,作为回调参数的套接字是刚刚连接并将代码提供给回调的套接字。然而,最近我尝试了一点java,我遇到了以下代码: ServerSocket client_socket = new ServerSocket(port); Socket socket = client_socket.acc

不久前,我在node.js中编写了一些代码,我使用了套接字的魔力来实现我想要的

io.sockets.on("connection", function(socket){ //code });
我从这段代码中了解到,作为回调参数的套接字是刚刚连接并将代码提供给回调的套接字。然而,最近我尝试了一点java,我遇到了以下代码:

ServerSocket client_socket = new ServerSocket(port);
Socket socket = client_socket.accept();
我现在的问题是,accept函数是否会像node.js中回调函数那样获取刚刚连接的套接字?

不完全一样。阻塞直到建立连接。异步运行代码的解决方案如下:

如果在另一个executorservice中运行NetworkService,它将不会阻塞,并在
poolSize
单独的线程中执行代码。这与node.js不同,后者是单线程的


您也可以打电话,并将其与a一起使用,以保持事物不被阻塞。

有关Executor服务的快速问题。它是否为每个连接的套接字创建一个新线程,然后将其作为可运行的参数提供?否,
Executors.newFixedThreadPool(4)
创建4个线程。处理程序可运行程序自动在这4个线程之一上运行。处理程序构造函数将套接字作为参数,并可以在其run()方法中使用它。如果处理程序运行缓慢,并且有5个连接进入,则第5个连接必须等待前4个连接中的一个完成。
 class NetworkService implements Runnable {
   private final ServerSocket serverSocket;
   private final ExecutorService pool;

   public NetworkService(int port, int poolSize)
       throws IOException {
     serverSocket = new ServerSocket(port);
     pool = Executors.newFixedThreadPool(poolSize);
   }

   public void run() { // run the service
     try {
       for (;;) {
         pool.execute(new Handler(serverSocket.accept()));
       }
     } catch (IOException ex) {
       pool.shutdown();
     }
   }
 }

 class Handler implements Runnable {
   private final Socket socket;
   Handler(Socket socket) { this.socket = socket; }
   public void run() {
     // read and service request on socket
   }
 }