使用命名管道

时间:2015-10-13 14:11:08

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

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

server.listen(path[, callback])

Class: net.Server

  

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

但这是在接收/收听端。我想要做的是重新使用这个现有的命名管道向侦听服务器发送请求,绕过IISNode的外部复杂性。 这是否可能?named-pipes包似乎在这里不适用,因为它似乎提供了一个太高级别的接口,它不像低级socket / 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人员认为这不会起作用,因为他们思考(不是权威信息)命名管道只接受一个客户端读/写管道。

相关:Calling localhost urls on Azure's IISNode

1 个答案:

答案 0 :(得分:0)

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