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

时间:2013-12-27 21:13:05

标签: javascript linux node.js sockets unix-socket

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

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套接字,并通过在命令行上使用nc -U /tmp/mysocket进行测试来获得良好的通信。然而...

我想从node.js应用程序建立与现有UNIX套接字的连接。使用我当前的代码,如果我从命令行(nc -Ul /tmp/mysocket)创建套接字,然后运行我的node.js应用程序,套接字和我的应用程序之间没有通信('connect'事件不是从node.js服务器对象)。

有关如何完成此操作的任何提示?我对node.js函数net.createSocket而不是net.createServer的实验到目前为止失败了,我不确定这是否是正确的轨道。

3 个答案:

答案 0 :(得分:14)

您正在寻找的方法是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 :(得分:1)

我只是想让它与Linux的抽象套接字一起工作,并发现它们与节点的网络库不兼容。相反,可以将以下代码与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 ...
});

答案 2 :(得分:-1)

您也可以连接到这样的套接字:

  

http://unix:/path/to/my.sock