将 Socket.io 与 IISNode 一起使用

要使 Socket.io 与 IISNode 一起使用,不使用虚拟目录/嵌套应用程序时所需的唯一更改是在 Web.config 中。

由于 Socket.io 发送以/socket.io 开头的请求,因此 IISNode 需要与 IIS 通信,这些也应该处理 IISNode,而不仅仅是静态文件请求或其他流量。这需要与标准 IISNode 应用程序不同的 <handler>

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

除了对 <handlers> 的更改之外,我们还需要添加额外的 URL 重写规则。重写规则将所有/socket.io 流量发送到运行 Socket.io 服务器的服务器文件。

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

如果你使用的是 IIS 8,除了添加上述处理程序和重写规则外,还需要在 Web.config 中禁用 webSockets 设置。这在 IIS 7 中是不必要的,因为没有 webSocket 支持。

<webSocket enabled="false" />