我想通过现有的命名管道请求一个GET。这是为了解决Azure上的Node进程被IISNode包装,因此没有自己的端口,而是被赋予命名管道(如PORT
环境变量)的事实。节点的net.Server
类知道如何处理命名管道,这就解释了HTTP路由工作正常的原因(因为http
.Server似乎使用了same interface)。从文档:使用命名管道的节点HTTP请求
Class: net.Server上server.listen(path[, callback])
在Windows中,本地域中使用命名管道来实现。 路径必须引用\?\ pipe \或\。\ pipe中的条目。任何字符 都是允许的,但后者可以对管道名称进行一些处理,例如解析..序列。尽管出现,管道名称 的空间是平坦的。管道不会持续存在,当最后一个关闭它们的引用 时它们将被删除。别忘了JavaScript字符串转义 要求使用双反斜线指定路径,例如:
但是这是在接收/侦听端。我想要做的就是重新使用这个现有的named-pipe来向监听服务器发送请求,绕过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家伙我谈过了的印象,这是行不通的,因为他们认为(未明确信息)命名管道只接受一个客户端的读/写管道。
相关:Calling localhost urls on Azure's IISNode