首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用命名管道的节点HTTP请求

使用命名管道的节点HTTP请求
EN

Stack Overflow用户
提问于 2015-10-13 14:11:08
回答 1查看 1.8K关注 0票数 2

我试图请求通过一个现有的命名管道。这是为了解决这样一个事实: Azure上的Node进程是由IISNode包装的,因此没有自己的端口,而是被赋予了一个命名管道(作为PORT环境变量)。Node的net.Server类知道如何处理命名管道,这解释了为什么HTTP路由工作正常(因为http.Server`似乎使用了同界面)。从医生那里:

server.listen(path[, callback])上的班级: net.Server

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

但这是在接收/监听端。我想要做的是重复使用现有的命名管道向侦听服务器发送请求,从而绕过IISNode的外部复杂性。这有可能吗?( named-pipes包在这里似乎不适用,因为它似乎提供了一个太高级别的接口,与我正在寻找的低级socket/EventEmitter特性不同)。指征可能是不可能的,但这似乎涉及显式创建命名管道,而不是重用现有管道,这正是我想要做的。它并没有说不起作用,只是说它没有得到支持。

我试图这样做,以发送请求,但我没有得到回应。它什么都不做就挂了。

代码语言:javascript
复制
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人员给人的印象是,这是行不通的,因为他们认为一个命名管道只接受一个客户端的读/写。

相关:在Azure的IISNode上调用localhost urls

EN

回答 1

Stack Overflow用户

发布于 2015-10-20 22:29:35

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33104956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档