我使用Visual Studio创建Node.js Socket.io应用程序。它在当地工作正常。 当我将其作为Azure应用程序发布时出错:
“由于发生内部服务器错误,无法显示页面。”
有人知道是什么问题,我在考虑端口80,它只是Azure应用程序的开放端口(+ 443)。
我试图收听端口80,但同样的错误。
答案 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?