2017-10-11 8 views
8

経由SocketIOからイベントを受信して​​いません。私が最初に持っていたクライアントで404のポーリングエラーを解決したので、接続が適切に行われたようです。しかし、今は、クライアントがIISノードからソケットイベントを受信して​​いないように見えます。クライアントは、私はIISノードを経由してホストさNodeJSサーバとのソケット接続を行っているWebアプリケーションを持っている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); 
} 

ノードでは、上記のイベントは発生しますが、フロントエンドでは受信されません。

クライアントは、次のようになります。

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がオン-IIS/ –

+0

あなたは私だけで、私はあなたとプロキシパスを使用する場合は、そのを追加したいSocket.emit()イベント – muthukumar

答えて

2

プロキシパスでsocket.ioを使用して、あなたは、いくつかのように変数を渡す必要がありますが、アップグレードなどIのdidntも、プロキシパスsocket.ioにIISを使用してみたが、私は、Apacheのプロキシパスでいくつかの問題に出くわしました。したがって、私はプロキシサーバーにnginxを選択します。

たぶん、あなたは、代わりにプロキシパスサーバーとしてnginxのを使用することができ、IISのパラメータのこの種を記述する必要があります。

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

を見ていsocket.onイベントであなたのServer.jsを追加してくださいすることができますロードバランシングは私としては、公開されたイベントが両方のノードを受信する方法で、redisまたはmemcacheのセッションを処理する必要があります^^) –

関連する問題