0

试图让 iisnode 和 socket.io 工作(在 linux 上运行良好)。我正在使用 Sticky 会话来使用多个处理器。

现在通过 iisnode 运行时,我在从客户端获取远程 IP 时遇到问题。

看起来 connection.headers 是空的。我错过了什么?

var server = net.createServer({ pauseOnConnect: true }, function (connection) {

    // Incoming request processing

    // We received a connection and need to pass it to the appropriate
    // worker. Get the worker for this connection's source IP and pass
    // it the connection.
    var remote = connection.remoteAddress; // this returns undefined
    var local = connection.localAddress; // this returns undefined 
    var ip = (remote + local).match(/[0-9]+/g)[0].replace(/,/g, '');
    var wIndex = ip % num_processes;

    var worker = workers[wIndex];

    console.log("Message to work "+ worker+", remote: "+ remote+ ", local: "+ local+", ip: "+ ip +", index: "+ wIndex);
    worker.send('sticky-session:connection', connection);

});

更新:使用 pause { pauseOnConnect: true } 时,您无法访问标题。

4

1 回答 1

0

不是 100% 确定这是否是您的问题,但是对于 IISNode,您需要明确告诉它您将在 Web.config 中使用 Socket.io。

您可以在 Web.config 中的两个位置执行此操作:

<handlers>元素内部

<handlers>
  <!-- Change the path attribute to your main file-->
  <add name="iisnode-socket.io" path="app.js" verb="*" modules="iisnode" />
</handlers>

为 Socket.io 添加额外的 URL 重写规则

<rule name="SocketIO" patternSyntax="ECMAScript">
  <match url="socket.io.+" />

  <!-- Change the url attribute to your main file-->
  <action type="Rewrite" url="app.js"/>
</rule>
于 2016-01-21T17:22:55.787 回答