【问题标题】:Node HTTP request using a named pipe使用命名管道的节点 HTTP 请求
【发布时间】:2016-01-11 08:08:03
【问题描述】:

我正在尝试通过现有的命名管道请求 GET。这是为了解决 Azure 上的 Node 进程由 IISNode 包装的事实,因此没有自己的端口,而是被赋予命名管道(作为PORT 环境变量)。 Node 的 net.Server 类知道如何处理命名管道,这就解释了为什么 HTTP 路由可以正常工作(因为 http.Server` 似乎使用了 same interface)。来自文档:

Class: net.Server on server.listen(path[, callback])

在 Windows 上,本地域是使用命名管道实现的。这 path 必须引用 \?\pipe\ 或 \.\pipe 中的条目。任何字符 是允许的,但后者可能会对管道名称进行一些处理, 比如解析..序列。尽管外观,管道名称 空间是平坦的。管道不会持续存在,它们会在最后一个时被移除 对它们的引用已关闭。不要忘记 JavaScript 字符串转义 要求使用双反斜杠指定路径,例如:

但这是在接收/收听端。我想做的是重新使用这个现有的命名管道向侦听服务器发送请求,绕过 IISNode 的外部复杂性。 这甚至可能吗?named-pipes 包似乎不适用于这里,因为它似乎提供了一个与我的低级套接字/EventEmitter 不相似的高级接口寻找)。有indications 可能不可能,但这似乎与显式创建命名管道有关,而不是重用现有的管道,这是我想要做的。它并没有说不会工作,只是说它不受支持

我尝试这样做以发送请求,但没有得到响应。它只是无所事事地挂起。

var namedPipeLocalDomain= app.config.port;

var options = {
    hostname: namedPipeLocalDomain,
    path: util.format('/api/%s', restPayloadObject.servicepath),
    method: 'GET'
};

logger.info('Creating connection using named pipe, ', namedPipeLocalDomain);

var req = http.request(options, function(res) {
    logger.info('STATUS: ' + res.statusCode);
    logger.info('HEADERS: ' + JSON.stringify(res.headers));

    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        body += data
        logger.info('BODY: ' + chunk);
    });
    res.on('end', function() {
        console.log('No more data in response.')
        console.log(body);
    })
});

我交谈过的一些 .NET 人员的印象是,这行不通,因为他们认为(不是确定的信息)命名管道只接受一个客户端读取/写入管道。 p>

相关:Calling localhost urls on Azure's IISNode

【问题讨论】:

    标签: node.js sockets azure named-pipes iisnode


    【解决方案1】:

    您可以尝试使用 process.env.PORT 代替 app.config.port 看看它是否有效。如果没有,唯一的选择是使用 Azure VM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 2018-03-12
      • 1970-01-01
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多