2013-05-14 9 views
5

olarak nginx's website açıklanmıştır büyük mesajlar Bir NodeJS sunucusuna vekil WebSockets benim nginx bu ayarları kullandım haricinde sorun yok iyi çalışıyor ve socket.emit()/socket.on() birbirinize mesajlar gönderin; oldukça büyük bir metin mesajı gönderene kadar (26 kB html).

  • bu büyük mesaj, bu büyük mesaj istemci tarafından gönderme edildikten sonra nginx günlüğüne
  • üzerinde hiçbir hata vardır
  • (yani konu nginx tarafında olduğunu tahmin) NodeJS tarafından alınmadı NodeJS, bu müşteriden socket.io'nun kalp atışlarını almayı durduracaktır.

Neyi yanlış yapıyorum? Farkında olmadığım bir nginx ayarı var mı? Yapılandırmanızdan bu ekleme

+0

Hangi nginx sürümünü kullanıyorsunuz? –

+0

Kullanıyorum nginx/1.4.0 – adrien

+0

Ben yapılandırmanızı kullanırken bu sorunu alıyorum: '' Uncaught TypeError: '' null 'onClose '' null '' NoClose '' yöntemini çağırın '' – chovy

cevap

4

Bulunan "çözüm" nginx ve NodeJS arasındaki tcp akışını bölmek için haproxy kullanmaktır.

Bu, optimal değil çünkü başka bir program yığınımıza ekliyor, ancak işi yapıyor.

Nginx web desteği desteği hala üretime hazır olmaktan çok uzak görünüyor.

0

Dene:

proxy_buffers 8 2m; 
proxy_buffer_size 10m; 
proxy_busy_buffers_size 10m; 

Sebep: proxy_buffer varsayılan boyut 4K veya 8K olduğunu. Bu nedenle, büyük mesajlar arabellek taşmasına neden olan bağlantıların bırakılması olabilir. Gereksinimlerinizi karşılayacak şekilde varsayılan ayarları here kontrol edin.

+0

Merhaba, zaten denedim ama hiçbir şey değiştirmez ... – adrien

+0

Aksine, proxy arabelleklerini "proxy_buffering off" ile kapatırdım. Comet, nginx arabelleği ile çalışmadı ve WebSockets'ın tam olarak aynı türde bir soruna sahip olduğundan şüpheleniyorum. Nginx'in otomatik olarak arabelleğe almayı devre dışı bırakacağını ya da en azından gerekliyse varsayılan yapılandırmaya koyduğunu düşünürdüm ama sanırım yeterince büyük kişi daha fazla arabelleğe girer. Eğer tamponlama rotasına gidecekseniz, 'büyük_client_header_buffers 8 32k;' gibi bir şey eklemelisiniz. Örnek bir yapılandırma için [bu buluşu] (https://gist.github.com/aku/5466527) adresine bakın. –

İlgili konular