2017-10-11 104 views
8

接收事件我有一个正在通过IIS节点托管的服务器的NodeJS套接字连接的Web应用程序。连接似乎是正确的,因为我解决了我最初拥有的客户端上的404轮询错误。但是现在,它看起来像客户端没有从IIS节点接收套接字事件。客户端没有从SocketIO通过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节点添加到工作流中似乎是停止工作的地方。任何帮助将不胜感激。

+0

看看这有助于? https://github.com/tjanczuk/iisnode/issues/402,https://github.com/tjanczuk/iisnode/issues/268和http://blog.novanet.no/scaling-concurrent-connections-with-节点JS和插孔-IO-ON-IIS/ –

+0

你能请添加您的Server.js随着socket.on事件,我只看到Socket.emit()事件 – muthukumar

回答

2

在使用与代理通socket.io,你需要通过像升级等一些变量我没有去尝试使用IIS代理通socket.io但我在Apache代理通遇到了一些问题就来了。因此我选择nginx作为代理服务器。

也许你需要写这样的参数在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; 
} 
+0

我想补充一点,如果您使用代理通作为我的负载平衡,您需要通过发布的事件接收两个节点的方式来处理redis或memcache上的会话^^) –