繁体   English   中英

Azure网站使用套接字协议启动我的Hapi Node.js网站

[英]Azure Web Site starting my Hapi Node.js site with socket protocol

每当我将Hapi.js Web应用程序部署到Azure时,它都会使用套接字协议启动服务器(请参见下面的输出)。

socket:\\.\pipe\b5c0af85-9393-4dcb-bd9a-3ba9b41ed6fb
  GET              /                              
  GET              /{param*}                      
  GET              /api/employees                 
  POST             /api/employees                 
  GET              /api/employees/{id}            
  PUT              /api/employees/{id}            
  DELETE           /api/employees/{id}            
  POST             /api/worklog                   
  GET              /login                         
  POST             /login                         
Hapi server started @ socket:\\.\pipe\b5c0af85-9393-4dcb-bd9a-3ba9b41ed6fb
150914/214730.270, [response], socket:\\.\pipe\b5c0af85-9393-4dcb-bd9a-3ba9b41ed6fb: [1;32mget[0m / {} [32m200[0m (316ms) 

但是,无论何时在本地运行它,它都开始使用http...。我还没有遇到使用Express或Loopback的问题,仅使用Hapi。 我缺少某种配置吗? 这是server.connection函数:

var server = new Hapi.Server();
var host = process.env.host || '0.0.0.0';
var port = process.env.port || 3000;

server.connection({host: host, port: port});

这很重要的原因是因为我无法将socket://*<mydoamin>*作为OAuth的回调URI传递给google。

您不需要将socket://<domain>传递给Google,只需将普通的https://yourDomain.comhttps://yourSiteName.azurewebsites.net传递给Google进行OAuth回调,它就应该像您期望的那样工作。

节点应用程序正在监听管道而不是普通的tcp套接字,这只是iisnode的实现细节。 基本上,问题在于节点拥有自己的网络服务器,因此您不能将其与IIS,Apache,nginx等其他网络服务器一起使用。iisnode弥合了IIS与节点之间的鸿沟,因为它允许IIS侦听IIS上的HTTP端口。机器80 ,当IIS在该端口上收到请求时,它将其转发到在命名管道上侦听的节点进程。 这样一来,您就可以像通常在Windows Server计算机上一样在IIS中管理IIS中的站点,同时在节点中实际编写应用程序。

您可以将其想象为在盒子上运行的2台Web服务器,其中一个(IIS)充当了实际上正在进行所有工作的另一个(节点)的代理。 iisnode开发人员选择使用命名管道而不是普通的tcp套接字的事实很奇怪(尽管这是可以理解的,因为您不能像管道一样轻易地保留端口本身),但是事实就是这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM