[英]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.