【问题标题】:Connecting to an already established UNIX socket with node.js?使用 node.js 连接到已经建立的 UNIX 套接字?
【发布时间】:2014-01-15 11:18:18
【问题描述】:

我正在开发一个 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 触发的)。 js 服务器对象)。

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

【问题讨论】:

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


    【解决方案1】:

    你要找的方法是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 ...
    });
    

    【讨论】:

    • @aleclarson 这不是套接字。这是一个网址。
    • 很公平,但如果可能的话,我仍然需要使用net.connect 连接到它。
    • 有没有办法将它与 express.js 网络服务器接口?
    【解决方案2】:

    我只是想让它与 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 ...
    });
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多