主机Node.js Socket.io作为Azure应用程序

时间:2016-07-26 15:44:02

标签: node.js azure socket.io azure-web-sites

我使用Visual Studio创建Node.js Socket.io应用程序。它在当地工作正常。 当我将其作为Azure应用程序发布时出错:

“由于发生内部服务器错误,无法显示页面。”

有人知道是什么问题,我在考虑端口80,它只是Azure应用程序的开放端口(+ 443)。

我试图收听端口80,但同样的错误。

2 个答案:

答案 0 :(得分:2)

要在Azure Web Apps上构建socket.io应用程序,您应该付出几个注意事项:

  • Node.js服务器监听port should be set similar to process.env.PORT || 3000`

  • 验证web.config设置,确认<webSocket enabled="false"/>以禁用IIS WebSockets模块,该模块包含自己的WebSockets实现,并与Node.js特定的WebSocket模块(如Socket.IO)冲突。

有关详细信息,请参阅https://azure.microsoft.com/en-us/documentation/articles/web-sites-nodejs-chat-app-socketio/

如有任何疑问,请随时告诉我。

答案 1 :(得分:1)

Azure App Service使用 IISNode node.exe 进程通信。这发生在命名管道上。 将应用程序配置为使用命名管道而不是套接字。

替换

app.set('port', 3000);

通过

app.set('port', process.env.PORT || 3000);

在Portal中启用 WebSockets ,重新启动Web App,您应该已启动并运行。

[ Gary Liu 是对的,不需要这个设置。然而,在App Service上使用示例Socket.IO聊天实现,Socket.IO似乎并不关心我如何设置&#34; WebSockets&#34;在门户网站。以任何方式工作。 ]

由于内部服务器错误的计算等效于可观察的Universe 中存在故障,您还应该为您的Node应用程序启用日志记录,至少在开发阶段是这样:
来自https://azure.microsoft.com/en-us/documentation/articles/web-sites-nodejs-debug/

  

要启用开发人员错误,请将以下行添加到IISNode.yml文件中:

     

devErrorsEnabled: true

     

启用此选项后,IISNode将返回发送到stderr的最后64K信息,而不是友好错误,例如&#34;发生内部服务器错误&#34;。

有关iisnode的更多信息:http://www.jokecamp.com/blog/getting-started-with-iisnode/
有关命名管道的更多信息:What are named pipes?