我想通過現有的命名管道請求一個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