Web Server üzerinde Java Koşu

5 Cevap java

Ben bazı komut satırı argümanları alır bir jar dosyası içine paketlenmiş ettik bağımsız Java uygulaması yazdım, bazı hardcore hesaplamaları yapar ve sonra nereye işaret varsayılan çıkış akışı için bazı çıkışı ile birlikte bir dosyaya sonucu yazar Sonuçlardan dosya vardır.

Ben şimdi bu teknoloji etrafında bir web sitesi oluşturmak istiyorum. Fikir sonra kullanıcı, Java uygulama arayın Java app sonuçlarını ayrıştırmak ve kullanıcıya görüntüleyen bir web sayfası, post it, bir html formu doldurabilirsiniz olmasıdır.

Currently, I am using a little bit of PHP to collect the data from the post request, and then just using an exec call:

java -jar -Xmx128m myapplication.jar command-line-arguments

Is this bad?

Ben her gün benim web sitesine birkaç bin ziyaretleri var ve Java uygulaması her yürütme bir dakika 30 saniye yukarı alabilir, bu yüzden aşırı verimsiz olmak istemiyorum. Her istek için doğrudan Java aramak zorunda daha iyi bir çözüm var olacak gibi görünüyor.

Ben, vb java servlet, fasulye, tomcat, GlassFish'in gibi şeyler işitme tutmak, ama ben ne olduğunu anlamıyorum ve nasıl onlar beni yararlanacak. Ne bu beni alabilirim? Java JVM her zaman oluşturulur olmak zorunda değildir, çünkü daha hızlı sonuç ben uygulamayı çalıştırmak? Daha az bellek kullanımı? Ben açıkçası mümkün olduğunca az bellek ayak izi ile mümkün olduğunca hızlı çalıştırmak istiyorum.

So, what is the best approach that I can take here? I don't want to do any serious rewriting of my application as there is a lot of code (so rewriting it to C or C++ is out of the question).


Thanks.

5 Cevap

Tamam, servlet bir kabın içinde çalıştırmak için tasarlanmış smalish uygulamalardır. Onlar tomcat gibi basit bir servlet kabı veya GlassFish'in gibi daha tam özellikli bir uygulama sunucusu da içine java kodu eklemek için bir uzantısı noktası sağlamak. Sen uygulama sunucusu http etkileşim ile ilgili ağır kaldırma yapar ve güvenlik, günlük, oturum yönetimi, hata işleme, ve daha fazlası gibi diğer özellikler (servlet specification bakınız) sağlar, çünkü bunu yapmak istiyorum.

Eğer uygulamayı bir uygulama conatiner (tüm diğer ekstra özellikleri ile web sunucusu) içinde yaşayan yaptığınızda, aynı zamanda daha iyi uygulama yaşam döngüsünü yönetebilirsiniz. Vb Plus daha örneklerini başlatmak, dağıtmanız, web sunucusu kapatmadan uygulamayı başlatmak ve durdurmak mümkün olacak sağ yanındaki ilki için bırakın bu büyük ikinci uygulama, kolay ile gelip zaman . Yoksa, kolay yedekleme ve yük dengeleme, uygulama sunucusu özellikleri için birlikte birkaç makineleri küme.

Bu konteyner tabanlı uygulamalar yapmak yardımcı olmak için orada daha birçok özellik, teknolojiler, ve çerçeveler vardır, sadece bir başlangıç. Servlet tutorial.

"Java JVM ben uygulamayı çalıştırmak her zaman oluşturulur olmak zorunda değildir, çünkü daha hızlı sonuç?" [Bu beni alır mıyım]

Evet.

Ve - Bonus - PHP değiştirebilirsiniz böylece tüm site tek bir dilde: Java.

O bir çekimde bir acı 30-60 saniye değil yani Ayrıca, sizin kullanım durumları gözden düşünebilirsiniz, ama belki daha hızlı adımlar bir dizi kullanıcı ile etkileşimli idam.

Bir servlet konteyner içinde kod çalıştırmak.

PHP web sitenizi tutmak gerekir ve zaten makinenizde yüklü java gibi, sadece (örneğin Apache Tomcat veya İskelesi gibi) ücretsiz bir servlet kabı yüklemeniz varsayarsak. Kullanılmayan bir port üzerinde servlet konteyner çalıştırmak için yapılandırın. (8080) varsayılan olduğunu.

Bu servlet kapları gerçekten ancak java kodu hizmet veren uzman sadece Apache gibi java tabanlı web sunucusu vardır.

Bir java web sunucusu yerine her istek için yeni bir java.exe çağırma kullanmanın en belirgin avantajı, sizin java sanal makinesi (JVM) her zaman ve koşma, "sıcak" olmasıdır. Java.exe (JVM) Her yeni bir başlangıç, size atıkların bu ekstra saniye verecektir.

Bir servlet kabı kullanmanın ikinci avantajı, konteyner her yeni istek için, JVM içinde, yeni bir iş parçacığı çalıştırmak için kodunuzu sağlayacak olmasıdır. Eğer hiçbir sorun kullanıcıların sizin binlerce bir gün için hizmet veren olacaktır. Eğer bir yerine java örnekleri yüzlerce başlamak olsaydı büyük olasılıkla, makine çökmesine sebep olacaktır.

Bir servlet kodunuzu yerleştirin. Bu gerçekten bile yeni başlayanlar için kolay. HTTP (servlet doGet veya doPost yöntemleri) üzerinden servlet konuşacaktır. Bu servlet php istek formu geçmek ve servlet size ne olursa olsun geri vermek zorunda: Bir sayfa, bir json nesne, xml veya düz metin.

Muhtemelen doğrudan web java uygulaması çağırmak istemiyorum. Gibi java işlemi çalıştırmak için 30 saniye sürerse, web sunucusu yolu batağa saplanmış almak için gidiyoruz, sitenizin dövülerek oluyor özellikle olduğunu söyledi.

Sen arka-uç işleme istekleri gönderme için web hizmetleri (ve muhtemelen bir mesaj kuyruğuna) içine bakmak isteyebilirsiniz. PHP sayfası daha sonra bir sıraya bir işleme isteği koyabilirsiniz, hangi sunucu üzerinde web servisi arayın, ya da sadece zaman uyumsuz bir şekilde java uygulaması başlaması olabilir. Bunu işleme iken, kullanıcı sadece bir tarayıcı asılı olacak, çünkü HTTP isteği, bitirmek için java uygulaması için beklemek, ve HTTP isteği zaman aşımı olabilir istemiyorum.

Java uygulaması tamamlandığında, bu kullanıcı daha sonra web sitesinden erişebilir ki, bir veritabanı tablosunu güncelleştirmek olabilir.

Ile başlamak için en kolay şey, size uygulamasında bir web sunucusu gömmek olacaktır. Jetty bakabilirsiniz.