客户端没有通过IIS节点从SocketIO接收事件

我有一个Web应用程序正在与通过IIS节点托pipe的NodeJS服务器进行套接字连接。 连接似乎是正确的,因为我解决了我最初有客户端上的404轮询错误。 但是现在,它看起来像客户端没有从IIS节点接收套接字事件。

我的理论是,因为IIS节点的行为像一个代理,事件发回到客户端在IIS节点级停止。

exports.register = function(socket) { User.schema.post('save', function (doc) { console.log("Save socket"); onSave(socket, doc); }); } function onSave(socket, doc, cb) { socket.emit('User List Update', doc); } 

在Node中,上述事件触发,但在前端没有收到。

客户端看起来像这样:

 var socket = io.connect("http://myinternallyhostedserver:7777/reception"); socket.on('User List Update', function () { console.log('Received socket event!'); if (vm.enableAlert) { vm.alertSound.play(); } vm.getUsers(); }); 

我的web.config文件如下所示:

 <configuration> <appSettings> <add key="virtualDirPath" value="/reception" /> </appSettings> <system.webServer> <handlers> <add name="iisnode" path="server/app.js" verb="*" modules="iisnode" /> </handlers> <iisnode enableXFF="true" /> <webSocket enabled="false"/> <rewrite> <rules> <rule name="reception"> <match url="/*" /> <action type="Rewrite" url="server/app.js" /> </rule> </rules> </rewrite> </system.webServer> </configuration> 

在我的本地机器上运行所有这些工作正常。 套接字事件被发送和接收。 将IIS节点添加到工作stream中似乎是停止工作的地方。 任何帮助将不胜感激。

虽然使用代理传递socket.io,你需要传递一些像升级等variables我甚至没有尝试使用iis代理传递socket.io但我遇到了一些问题,在Apache代理传递。 所以我selectnginx来代理服务器。

也许你需要在iis中写这样的参数,或者你可以使用nginx作为代理服务器。

 location / { proxy_pass http://socket_nodes_2/doSomething; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } upstream socket_nodes_2 { server 192.168.1.155:1338; server 192.168.1.156:1338; }