2017-10-11 90 views
8

IIS Düğümü aracılığıyla barındırılan bir NodeJS sunucusu ile soket bağlantısı yapan bir web uygulamasına sahibim. Bağlantı, başlangıçta sahip olduğum istemcide 404 yoklama hatasını çözdüğümden düzgün yapılmış gibi görünüyor. Ancak şimdi, istemcinin IIS Düğümünden soket olayları almıyor gibi görünüyor.İstemci, IIS Düğümü aracılığıyla SocketIO'dan olay almıyor

Teorimim, IIS Düğümünün bir proxy gibi davranması nedeniyle, istemciye gönderilen olayın IIS Node düzeyinde bir yerde durmasıdır. Düğümde, yukarıdaki olay tetiklenir, ancak ön uçta alınmaz.

istemci şuna benzer:

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(); 
}); 

Benim web.config dosyası şöyle görünür: benim yerel makinedeki tüm bu Running

<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> 

düzgün çalışır. Soket olayları gönderilir ve alınır. IIS Düğümünü iş akışına eklemek, çalışmayı durdurduğu yerde görünüyor. Herhangi bir yardım büyük takdir edilecektir.

+0

Bu yardımcı olur mu? https://github.com/tjanczuk/iisnode/issues/402, https://github.com/tjanczuk/iisnode/issues/268 ve http://blog.novanet.no/scaling-concurrent-connections-with- node-js-and-soket-io-on-iis/ –

+0

Lütfen Server.js dosyanızı ekleyin socket.on Olay ile Sadece Socket.emit() olayını görüyorum – muthukumar

cevap

2

Proxy geçişi ile socket.io kullanılırken, yükseltme gibi bir değişkeni geçmeniz gerekir. Hatta proxy pass socket.io için iis kullanmayı denemedim ama apache proxy geçişinde bazı problemlerle karşılaştım. Bu nedenle, proxy sunucusuna nginx'i seçiyorum.

Belki de bu tür parametreleri iis'e yazmanız gerekir, aksi halde nginx'i bir proxy geçiş sunucusu olarak kullanabilirsiniz.

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

Proxy geçişi kullanıyorsanız, bunu eklemek istiyorum Benimle yük dengeleme, yayınlanmış olayı her iki düğümün aldığı şekilde, redis veya memcache ^^ oturumunu işlemeniz gerekir;) –