SORU
21 AĞUSTOS 2012, Salı


Neden node.js sadece bir seferde altı istekleri işleniyor?

Biraz farklı, ve ne yazık ki asimetrik bir REST API olan merkezi bir sunucu için bir proxy API olarak bir DİNLENME uygulayan node.js bir server var.

Çeşitli tarayıcılarda çalışan müşterimiz, merkezi sunucudan görevleri almak için düğüm sunucu sorar. Düğüm server merkezi bir görev kimliklerinin bir listesini alır ve istemciye gönderir. İstemci daha sonra proxy sunucusu üzerinden kimlik başına iki DİNLENME API çağrıları yapar.

Söyleyebileceğim kadarıyla, bu şeyler zaman uyumsuz olarak gerçekleştirilir. Günlük konsolunda istemci başladığım zaman bu gibi görünüyor:

Requested GET URL under /api/v1/tasks/*: /api/v1/tasks/

Bu birkaç saniye merkezi sunucudan listesini verir. Yanıt alır almaz, sunucu bu çok hızlı bir şekilde barfs:

Requested GET URL under /api/v1/tasks/id/:id :/api/v1/tasks/id/438
Requested GET URL under /api/v1/workflow/id/:id :/api/v1/workflow/id/438
Requested GET URL under /api/v1/tasks/id/:id :/api/v1/tasks/id/439
Requested GET URL under /api/v1/workflow/id/:id :/api/v1/workflow/id/439
Requested GET URL under /api/v1/tasks/id/:id :/api/v1/tasks/id/441
Requested GET URL under /api/v1/workflow/id/:id :/api/v1/workflow/id/441

Sonra, her zaman bu istekleri bir çift merkezi sunucudan bir sonuç alır, bir iki satır çok hızlı bir şekilde kustu.

Bizim node.js server altı isteklerini bir zaman için istekli olduğunu sadece öyle görünüyor.

CEVAP
21 AĞUSTOS 2012, Salı


TCP bağlantı sınırları Düğüm kendisini dayattığı yok. (Bütün mesele son derece eşzamanlı ve eşzamanlı bağlantı binlerce işleyebilir.) OSolabilirTCP bağlantı sınırı.

Bu daha olası olduğunu ya da vurmak bir çeşit sınırlama sizin arka uç sunucu veya yazıyorsun yerleşik HTTP kütüphanenin bağlantı sınırı, ama bunu söylemek güç olmadan daha fazla ayrıntı hakkında bir sunucu veya Düğüm uygulanması.

Düğümün dahili HTTP library (ve tabii ki herhangi bir kütüphane inşa üstünde olan çoğu) tutar bir bağlantı havuzu () Agent sınıf) çok daha kolay yararlanmak HTTP canlı tutma. Bu yardımcı olur artırmak performans olduğunda çalışan bir çok talep için aynı sunucu: açılış yerine bir TCP bağlantısı, yapma bir HTTP isteği, yanıt, kapanış TCP bağlantısı ve tekrar; yeni istekleri olabilir verilen yeniden TCP bağlantılarını.

0.10 ve önceki düğüm, HTTP Aracısı varsayılan olarak yalnızca tek bir ana bilgisayara 5 eşzamanlı bağlantı açılacaktır. Bu kolayca değiştirebilirsiniz: d HTTP httpmodülü require varsayıyorsun)

http.globalAgent.maxSockets = 20; // or whatever

düğüm 0.12 Infinity varsayılan maxSockets ayarlar.

Bağlantı falan yerde sınırı tutmak isteyebilirsiniz. Seni istemiyorum tamamen korkutur senin arka uç sunucusu ile yüzlerce HTTP isteği altında bir ikinci-performans verecektir muhtemelen daha kötü izin verirsen aracının bağlantı havuzu işlerini halletsin, azaltma istekleri çok değil, aşırı sunucunuz. En iyi bahis bazı deneyler eşzamanlı istekleri optimum sayıda durumun ne olduğunu görmek için çalıştırmak olacaktır.

Eğer gerçekten bağlantı havuzu istemiyorsanız ... ancak, sadece havuzu tamamen bypass - agent talep seçenekleri false gönderilen:

http.get({host:'localhost', port:80, path:'/', agent:false}, callback);

Bu durumda, eşzamanlı HTTP istekleri kesinlikle limit yok.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kimberly p

    kimberly p

    23 Ocak 2010
  • kndx

    kndx

    11 Mart 2006
  • TheRightTire

    TheRightTire

    14 EKİM 2009