“侦听”Azure部署

时间:2015-07-24 03:09:29

标签: node.js azure socket.io iisnode

Nodejs服务器就像本地的冠军一样。部署到Azure Web App时,它会因服务器错误而失败: isnode在处理请求时遇到错误。

  

HRESULT:0x6d HTTP状态:500 HTTP subStatus:1013 HTTP原因:   内部服务器错误您收到此HTTP 200响应,因为   system.webServer/iisnode/@devErrorsEnabled配置设置为   '真正'。   ...

这里没有真实信息,所以转向日志......我看到了:

  

2015年7月24日星期五01:17:32 GMT + 0000(世界协调时间):   无异常:TypeError:Object   \。\ pipe \ b9a229c1-7e20-4d2a-9f2d-fec75412cede没有方法   '听众'       在Server.attach(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ node_modules \ engine.io \ lib \ server.js:358:26)       在Function.attach(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ node_modules \ engine.io \ lib \ engine.io.js:124:10)       在Server.listen.Server.attach(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ lib \ index.js:226:21)       在新服务器上(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ lib \ index.js:51:17)       在Function.Server(D:\ home \ site \ wwwroot \ node_modules \ socket.io \ lib \ index.js:39:41)       在对象。 (d:\家\网站\ wwwroot的\ server.js:11:17)       在Module._compile(module.js:456:26)       at Object.Module._extensions..js(module.js:474:10)       在Module.load(module.js:356:32)       在Function.Module._load(module.js:312:12)

追溯回来,我认为感兴趣的是:

  

at Object。 (d:\家\站点\ wwwroot的\ server.js:11:17)

在nodejs服务器代码中:

var socket = io.listen(process.env.port || 3000);

所以我猜这个失败可能是由于版本控制还是什么?我似乎无法获得任何socket.io应用程序作为云服务或云应用程序在azure Web部署上工作。

其他人?

1 个答案:

答案 0 :(得分:0)

你可以发布剩下的代码吗?初始化io变量对于了解哪些内容非常重要。

如果使用Express 4

,初始化时,您的代码应该类似于此
var app = require('express')();

var server = require('http').Server(app);
var io = require('socket.io')(server);
// Get the port that we should be listening on
server.listen(process.env.PORT || 8080);

在配置中,当使用IISNode时,您需要通过将以下内容添加到Web.config中的<handlers>元素来指定您正在使用Socket.io:

<add name="iisnode-socket.io" path="server.js" verb="*" modules="iisnode" />

此外,我们需要让IISNode知道如何通过添加新的重写规则来指导我们的Socket.io请求:

<rewrite>
  <rules>        
    <rule name="SocketIO" patternSyntax="ECMAScript">
      <match url="socket.io.+" />
      <action type="Rewrite" url="server.js"/>
    </rule>
  </rules>
<rewrite>

同时检查并查看服务器实例上是否正确安装了socket.io包。

Here's我写了一篇关于使用Socket.io和虚拟目录使用在IIS中使IISNode工作的答案。