2012-05-14 7 views
23

Şu ana kadar yaklaşık iki yıldır jetty/tomcat uygulama sunucusunu kullanarak ilkbahar web uygulamaları ile çalışıyorum, ancak yine de beni çeken şey, bu sunucularda çoklu isteklerin nasıl ele alınacağıdır. Baharın bekarlar yapmada yararlı olduğunu anlıyorum, ama benim anlayışım bununla sınırlı. Birisi, birden çok isteğin nasıl ele alındığını anlamama yardımcı olabilecek iyi bir kaynağa işaret edebilir.İskelet, çoklu istekleri nasıl yerine getirir

cevap

27

Bu, iki gün boyunca ona nasıl baktığını anlamaya çalıştığım pek çok düzeyde yanıtlanabilir ... bu yüzden yüksek seviyede bir atış yapacağım.

Iskelenin dinlediği bu sunucu bağlantı noktası ve işi istemci ile sunucu tarafı arasında bağlantı nesneleri almak olan bazı alıcı zincirleri vardır. Bu bağlantıya sahip olduğunuzda, belki de kimlik doğrulama gibi şeyler yapan iskelet işlemcisi mimarisinden akar, veya bir oturum kimliğini çıkarır ve istek üzerine bir oturum nesnesini ekler. Ardından, servlet işleyicisine doğru çalışır ve uygun sunucu bulunur ve servlet-api ile başlamaya başlarsınız. Bu noktada, en azından servlet 2.5 altında, servlet-api içinde olduğunuz süre boyunca isteğinize tahsis edilen bir iş parçacığınız vardır. Servlet 3.0'da, sizin için bazı uyumsuzluk mekanizmalarına sahipsiniz ya da rıhtım sürekliliğini, servlet 2.5 api üzerinde uyumsuz destek almak için kullanabilirsiniz. Her durumda, sunucunun iş parçacığı, tüm zamanlarını servlet-api içinde geçiren iş parçacıkları olan bu bağlayıcılara ayırmak için kullandığı bir iş parçacığı havuzu vardır. İskeleler devamlılık api ve daha yeni servlet 3.0 desteği, iş parçacıklarını birincil iş parçacığına geri vermek için mekanizmalar sağlar, böylece diğer istekleri kabul etmek ve işlemek için zaman harcayabilirler. N0 api ai'nin kullanımıyla ilgili olarak kaplamanın altında çok daha fazlası oluyor ve iskeletin bu şeyleri nasıl verimli bir şekilde yönetiyor olduğu bellidir, ama belki de bu sizin ilk sorunuzun sorulması için yeterlidir. Eğer değilse, iskelet doktorlarını (http://www.eclipse.org/jetty/documentation/current) inceleyebilir ya da iskelet listelerine bakabilirsiniz. Webtide (http://webtide.com/blogs) adresindeki bloglarda http, spdy ve websocket bağlantılarının ele alınması ve işlenmesiyle ilgili olarak jetty-9 optimizasyonları hakkında bir tartışma yapılmıştır.

+0

Sağladığınız içgörüyü gerçekten takdir ediyorum. Hala bir şeyi merak ediyorum. İsteğin yürütülmesini bekleyen bir iş parçacığı havuzu varsa, ilkbaharda yazdığım webapp kodunun bir parçasından şu anda yalnızca bir iş parçacığı var mıdır? Bu kodun birden çok kopyasına sahip olabilirim ve birden çok istekte bulunabiliyor muyum? –

+1

servlet'leri sunulmaz, thread'ler ve aynı hizmet() veya doPost() yöntemleriyle birden fazla iş parçacığı yürüyor olabilir, 'state', yönteme ve thread'ın kendisine gelen değişkenlerle tutulur. Servletleri kendileri ifade edebilir ve senkronize ile işleri yönetirsiniz ve normalde servletinizin tek bir iş parçacığı olmasını istemezseniz, tüm fikir aynı anda birden fazla istekte bulunabilmektir ve siz bunu yaparken bunu yapamazsınız. Bir servlet kadar basit bir şey üzerinde kilitleme iş parçacığı var. –