Node.js可以监听UNIX套接字吗?

62

node.js能否监听UNIX套接字?我没有找到任何相关文档。我只看到可以监听专用端口的可能性。

2个回答

84

要在node.js中监听传入连接,您需要使用net.server类。

创建此类的实例的标准方法是使用net.createServer(...)函数。一旦您拥有此类的实例,您可以使用server.listen(...)函数告诉服务器实际侦听的位置。

如果listen的第一个参数是数字,则nodejs将侦听具有该端口号的TCP/IP套接字。但是,如果listen的第一个参数是字符串,则服务器对象将侦听该路径上的Unix套接字。

var net = require('net');

// This server listens on a Unix socket at /var/run/mysocket
var unixServer = net.createServer(function(client) {
    // Do something with the client connection
});
unixServer.listen('/var/run/mysocket');

// This server listens on TCP/IP port 1234
var tcpServer = net.createServer(function(client) {
    // Do something with the client connection
});
tcpServer.listen(1234);

能否使用子进程和socket.io来实现客户端连接并使用此方法与服务器端应用程序通信?是否需要一个新的端口/路径来维护1对1的客户端到应用程序关系? - tremor
18
对于那些想知道的人,你也可以使用 express 4.x来做到这一点!因为 app.listen 基本上是一个 帮助函数,所以 app.listen("/var/run/mysocket")同样有效。 - Sam Holmes
1
看起来执行退出后套接字文件仍然存在。Node 是否有更好的方法在退出时自动删除 sock 文件? - ggedde
2
@ggedde 我也遇到了这个问题。在 listen() 调用之前加上 fs.unlinkSync(socketPath); 就解决了。 - gitaarik
1
@ggedde 我曾经创建了一个包来帮助添加进程退出监听器:https://www.npmjs.com/package/catch-exit 相关的源代码用于附加监听器在这里:https://github.com/electrovir/catch-exit/blob/master/src/index.ts#L223-L249 - derpedy-doo
显示剩余2条评论

33

1
关于 http 模块,请查看 https://nodejs.org/api/http.html#http_server_listen_path_callback。 - Ryan Allen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接