使用node.js连接到已经建立的UNIX套接字?

14

我正在开发一个 node.js 应用程序,它将连接到一个 UNIX socket(在 Linux 机器上),并促进 Web 页面和该 socket 之间的通信。到目前为止,我已经能够使用我的主要 app.js 中的以下代码创建 socket 并进行来回通信:

var net = require('net');
var fs = require('fs');
var socketPath = '/tmp/mysocket';

fs.stat(socketPath, function(err) {
    if (!err) fs.unlinkSync(socketPath);
    var unixServer = net.createServer(function(localSerialConnection) {
        localSerialConnection.on('data', function(data) {
            // data is a buffer from the socket
        });
        // write to socket with localSerialConnection.write()
    });

unixServer.listen(socketPath);
});

这段代码会让node.js在/tmp/mysocket创建一个UNIX socket。我通过在命令行中使用nc -U /tmp/mysocket进行测试,已经可以成功地通信。不过...

我想从我的node.js应用程序连接到一个已存在的UNIX socket。使用当前的代码,如果我从命令行中创建一个socket(nc -Ul /tmp/mysocket),然后运行我的node.js应用程序,socket和我的应用程序之间没有通信('connect'事件没有从node.js服务器对象触发)。

有什么建议可以完成这个任务吗? 我尝试过使用node.js函数net.createSocket而不是net.createServer,但是到目前为止都失败了,我也不确定是否走上了正确的轨道。

3个回答

18

你要找的方法是 net.createConnection(path)

var client = net.createConnection("/tmp/mysocket");

client.on("connect", function() {
    ... do something when you connect ...
});

client.on("data", function(data) {
    ... do stuff with the data ...
});

1
@aleclarson 那不是一个套接字,而是一个URL。 - user149341
好的,但如果可能的话,我仍然需要使用 net.connect 连接它。 - aleclarson
有没有办法将其与express.js Web服务器进行接口? - ericek111

2

我刚刚尝试在Linux的抽象套接字上使用它,但发现它们与Node的net库不兼容。相反,可以使用以下代码与abstract-socket库:

const abstract_socket = require('abstract-socket');

let client = abstract_socket.connect('\0my_abstract_socket');

client.on("connect", function() {
    ... do something when you connect ...
});

client.on("data", function(data) {
    ... do stuff with the data ...
});

-5

请参考此讨论,快速了解Unix套接字和TCP套接字之间的区别。https://serverfault.com/questions/124517/whats-the-difference-between-unix-socket-and-tcp-ip-socket - Anubhab

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