gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:08:54 25 4
gpt4 key购买 nike

不久前我在 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
}
}

如果您在另一个执行器服务中运行 NetworkService,它不会阻塞,并在 poolSize 单独的线程中执行代码。这与单线程的 Node.js 不同。

您也可以调用getChannel并将其与 Selector 一起使用保持事物非阻塞。

关于java - node.js 回调是否模仿 java 接受套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23047454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com