簡體   English   中英

node.js回調模仿Java接受套接字嗎?

[英]Does the node.js callback mimic the java accept socket?

一段時間以前,我已經在node.js中編寫了一些代碼,並且我用套接字的魔力來完成我想要的。

io.sockets.on("connection", function(socket){ //code });

我從這段代碼中了解到,作為回調參數的套接字是剛剛連接的套接字,只是將代碼提供給回調。 但是最近我嘗試將其移到Java中,並且遇到了以下代碼:

ServerSocket client_socket = new ServerSocket(port);
Socket socket = client_socket.accept();

現在我的問題是,accept函數將以回調函數在node.js中進行連接的方式來獲取我剛剛連接的套接字?

不完全一樣。 #accept()阻塞直到建立連接。 ExecutorService中有一個異步運行代碼的解決方案:

 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
   }
 }

如果在另一個executorservice中運行NetworkService,它將不會阻塞,並在poolSize獨立線程中執行代碼。 這與單線程的node.js不同。

您也可以調用getChannel並將其與Selector一起使用,以使內容保持不阻塞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM