Java backend'ine PHP kodu bağlayın

9 Cevap java

Ben ön uç ve arka uç olarak bir Java hizmet için PHP kullanarak bir web sitesi uygulanması duyuyorum. Aşağıdaki gibi iki parçaları şunlardır:

  1. PHP ön http isteklerini dinler ve veritabanı ile etkileşim.

  2. Java geri sürekli çalışacak ve ön uç çağrılarına yanıt ucu.

Daha spesifik olarak, arka ucuna birkaç IM hizmetleri (AOL, MSN, Yahoo, Jabber ...) için linki bağlayan ve korumak bir servistir.

Katmanların hem de aynı sistem (bir CentOS kutu, sanırım) üzerine konuşlanmış ve (örneğin: XML-RPC kullanarak) bir orta tabaka tanıtan olacak performansı (kaynak da oldukça sınırlıdır) azaltacaktır.

Soru: Doğrudan iki katmanı bağlamak için bir yolu var mı? (Arasında artık web hizmetleri)

9 Cevap

Bu iki ayrı çalışan süreçleri, (gibi JNI) bir "doğrudan" çağrısı mümkün değil arasındaki iletişimdir beri. Bu tür süreçler arası iletişimde yapmak için en kolay yolu named pipes ve ağ prizler muhtemelen. Her iki durumda da, bir iletişim protokolü tanımlamak ve her iki tarafta bunu uygulamak gerekir. Böyle XML-RPC gibi standart bir protokolü kullanarak bu kolaylaştırır, ancak kesinlikle gerekli değildir.

PHP-Java köprü (php-java-bridge.sourceforge.net/pjb /) denedim ve oldukça iyi çalışıyor. Temelde, biz (yani Yerel soketi, 8080 portu ve benzeri çeşitli seçenekler vardır) portu dinleyen bir jar dosyası (JavaBridge.jar) çalıştırmak gerekir. Sizin java class dosyaları sınıfyoluna JavaBridge availabe gerekir. Eğer php dosya Java.inc eklemek gerekir ve Java sınıfları erişebilirsiniz.

Tabii, orada birçok yolu vardır, ancak sınırlı bir kaynak hakkında dedi ki ...

IMHO kendi hafif RPC gibi protokolünü tanımlamak ve iletişim kurmak için TCP / IP soketleri kullanır. Aslında bu durumda RPC vs tam avantajlarını kullanmaya gerek yoktur .. Bu özel durum için API tanımlamak ve her iki tarafta bunu uygulamak için yeterlidir. Bu durumda oldukça küçük için paketleri serileştirebilirsiniz. Hatta uzak yöntemlere GUID'lerin bir tür atamak ve trafik ve hız-up diafon kaydetmek için kullanabilirsiniz.

Prizler kullanım avantajı çözüm oldukça ölçeklenebilir olmasıdır.

Uygulama entegrasyonu için dört desen genellikle vardır:

  1. Dosya sistemi ile, örneğin. tüketici tarafından izlenen bir dizinin tek üretici yazma verileri
  2. Veritabanı üzerinden yani. iki uygulama bir şema veya tablo paylaşmak ve veri değiş tokuş için kullanmak
  3. RMI / RPC / web servis aracılığıyla / herhangi bir engelleme, başka bir app senkron çağrı. Java PHP için yukarıda listelenen çeşitli entegrasyon kütüphanelerinden almak, ya da sabun gibi bazı web hizmetleri standartlarını kullanabilirsiniz.
  4. mesajlaşma ile / olmayan herhangi bir engelleme, bir uygulama başka bir uygulama için bir mesaj gönderir uyumsuz işlem.

Bu desen her artıları ve eksileri var, ama başparmak iyi bir kural paçayı gevşek bağlama ile birini seçmek için. Eğer 4. Seçili Örneğin, Java uygulaması da PHP app aşağı almadan kaza olabilir.

Ben o zaman özel seçenekleri araştırmak, sizin için doğru model almak özel kütüphaneler veya cevapları burada listelenen teknolojileri bakmadan önce öneririm.

Sen PHP/Java integration deneyebilirsiniz.

Iletişim tek yönlü ("IM için sendmail" gibi bir şey) ise de, bir dosyaya PHP isteklerini yazmak ve Java uygulaması olduğunu izleyebilir.

Ben de son zamanlarda bu sorun ile karşı karşıya geldi. Yukarıda Reçine çözüm aslında JRuby, Jython'da ve Rhino çizgisinde Java PHP tam bir yeniden-yazma olduğunu. Bu Quercus denir. Benim için olduğu gibi Ama ben senin Apache / PHP kurulum gerçekten bir seçenek değil dışarı atarak, sizin için tahmin ediyorum.

Ve Quercus ile daha fazla sorun dışında vardır: ücretsiz sürümü (Resin gibi zor değil inanıyorum (ama IANAL istiyorum gerçi)) ticari yazılım geliştirme eğer zor GPL, ve bu ücretsiz sürümü üstüne bayt kodu derleme destek, bu yüzden onun temelde bir tercüman Java ile yazılmış değildir.

Ne sonunda karar sadece HTTP üzerinden basit mesaj alışverişi oldu. Ben kullanılan PHP'nin json_encode() / json_decode() ve Java'nın json-lib JSON (veri modeli için basit, metin tabanlı, iyi maç) iletileri kodlamak.

Bir başka ilginç ve hafif bir seçenek Java PHP kodu oluşturmak zorunda ve sonra HTTP üzerinden ve çalıştırmak olduğunu getirmesi () yönerge PHP include kullanmak olacaktır. Ben bu olsa denemedim.

Onun gerçek HTTP hakkında endişeleriniz (performans) çağırırsa, ne bu çözümlerin orada yardımcı olacaktır. Söyleyebileceğim tek ben aynı LAN üzerinde PHP ve Java ile sorunları vardı değil olmasıdır. Benim duygu bu sürece RPC (gerçekten zaten yapmanız gereken) oldukça ders taneli çağırır tutmak gibi uygulamaların büyük çoğunluğu için bir sorun olmayacak olmasıdır.

Maalesef, bu hızlı cevabın biraz ama: i Reçine uygulama sunucusu java ve PHP entegre desteği vardır duydum.

Onlar birlikte php ve java şut iddia: http://www.caucho.com/resin-3.0/quercus/

Ben ancak onun PHP desteği, J2ee uygulamaları hizmet için reçine kullandım.

Böyle maceralarını duymak ilgi duyarım.

Neden web hizmeti kullanmak değil?

Java katman oluşturun ve bir ws erişimi (vb Eksen, SpringWS, ..) ve Php koymak istemci ws birini kullanarak Java katmana erişmek.

Ben basit ve kullanışlı olduğunu düşünüyorum.

Ben iki kat bağlamak için bir araç tanıttı Bu sayfada geldim. Ancak, yine de, bir orta tabaka (TCP / IP) gerektirir. Gelen tüm bağlantıları kabul eder çünkü Ayrıca, diğer hizmetler de Java hizmetini yararlanabilir.

http://www.devx.com/Java/Article/20509

[Araştırma ...]