Schließen Sie den PHP-code zu Java-backend
Ich bin Umsetzung einer website mit Hilfe von PHP für das Frontend und einem Java-service als back-end. Die beiden Teile sind wie folgt:
-
PHP-front-end-hört auf http-Anforderungen und kommuniziert mit der Datenbank.
-
Java Backend läuft dauernd und reagiert auf Anrufe aus dem front-end.
Genauer gesagt, das Backend ist ein daemon, der verbindet und pflegen Sie die Verknüpfung zu einigen CHAT-Dienste (AOL, MSN, Yahoo, Jabber...).
Beiden Schichten eingesetzt werden, die auf dem gleichen system (CentOS-box, nehme ich an) und die Einführung einer mittleren Schicht (zum Beispiel: die Verwendung von XML-RPC), verringert sich die Leistung (die Ressource ist auch eher begrenzt).
Frage: gibt es eine Möglichkeit die Verknüpfung der beiden Ebenen direkt? (nicht mehr web services in zwischen)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da dies die Kommunikation zwischen zwei getrennten Prozessen einen "direkten" Aufruf (wie in JNI) ist nicht möglich. Die einfachsten Möglichkeiten, um solche Interprozess-Kommunikation sind wahrscheinlich named pipes und Netzwerk-sockets. In beiden Fällen müssen Sie definieren ein Kommunikationsprotokoll und implementieren es auf beiden Seiten. Mit einem standard-Protokolle wie XML-RPC ist dies leichter, aber ist nicht unbedingt notwendig.
Im Allgemeinen gibt es vier Muster für die integration von Anwendungen:
Jedes dieser Muster hat vor-und Nachteile, aber eine gute Faustregel ist, nehmen die mit der lockersten Kupplung, die Sie bekommen können Weg mit. Zum Beispiel, wenn Sie markierte #4 deine Java-Anwendung kann Abstürzen, ohne dass Sie auch unter sich Ihre PHP-app.
Ich würde vorschlagen, vor der Suche auf bestimmte Bibliotheken oder Technologien aufgeführt, die in den Antworten hier, dass Sie wählen Sie die richtige Muster für Sie sind, dann untersuchen Sie Ihre Optionen zu haben.
Habe ich versucht die PHP-Java-bridge(php-java-bridge.sourceforge.net/pjb/) und es funktioniert ganz gut. Im Grunde brauchen wir zum ausführen einer jar-Datei (JavaBridge.jar) lauscht auf dem port(es gibt mehrere Optionen zur Verfügung wie Lokale socket, port 8080 und so weiter). Ihre java-Klasse-Dateien müssen verfügbar sein, um die JavaBridge in den classpath. Sie brauchen, um eine Datei von Java.inc in Ihre php-und Sie können den Zugriff auf die Java-Klassen.
Sicher, es gibt viele Möglichkeiten, aber Sie haben gesagt, über die begrenzte Ressource...
IMHO definieren Sie Ihre eigene lightweight RPC-ähnliches Protokoll und sockets auf TCP/IP zu kommunizieren. Eigentlich in diesem Fall gibt es keine Notwendigkeit zu verwenden Vorteile von RPC etc... Sie brauchen nur zu definieren-API, die für diesen speziellen Fall und implementieren es auf beiden Seiten. In diesem Fall können Sie serialisieren Sie Ihre Pakete ganz kleinen. Sie können auch zuweisen, eine Art von GUIDs zu Ihrer remote-Methoden, und verwenden Sie zum speichern den Datenverkehr und beschleunigen Ihre Kommunikation.
Den Vorteil, sockets-Verwendung ist, dass Ihre Lösung sehr skalierbar.
Könnten Sie versuchen, die PHP - /Java-integration.
Auch, wenn die Kommunikation unidirektional ist (etwas wie "sendmail für SOFORTNACHRICHTEN"), könnten Sie schreiben, die PHP-Anfragen an eine Datei und einen monitor, die in Ihre Java-Anwendung.
War ich auch konfrontiert mit diesem problem vor kurzem. Die Harz-Lösung oben ist eigentlich ein komplettes re-schreiben von PHP in Java entlang der Linien von JRuby, Jython und Rhino. Es heißt Quercus. Aber ich vermute, für Sie, wie es für mich war, warf sich Ihre Apache/PHP-Konfiguration nicht wirklich eine option.
Und es gibt mehr Probleme mit Quercus außerdem: die Kostenlose version ist GPL, das ist schwierig, wenn man die kommerzielle software entwickeln, (obwohl nicht so schwierig wie Harz möchte Sie glauben (aber IANAL)) und oben auf, dass die Kostenlose version nicht kompilieren von byte-code, so seine im Grunde ein interpreter, der in Java geschrieben.
Was habe ich mich entschlossen, am Ende war es nur einfache Nachrichten austauschen, die über HTTP. Ich benutzt PHP
json_encode()
/json_decode()
und Java json-lib zum codieren von Nachrichten im JSON - (einfaches text-basiertes, gute übereinstimmung für die Daten-Modell).Andere interessante und leichte-Gewicht-Möglichkeit wäre, Java generieren von PHP-code und dann unter Verwendung der PHP include () - Richtlinie zu Holen, die über HTTP und führen Sie es aus. Ich habe nicht versucht, obwohl dies.
Wenn Ihr die eigentliche HTTP-Aufrufe, die Sie über besorgt sind (für die Leistung), keine dieser Lösungen helfen. Alles was ich sagen kann ist, dass ich noch nicht hatte Probleme mit der PHP und Java auf dem gleichen LAN. Mein Gefühl ist, dass es nicht ein problem für die überwiegende Mehrzahl der Anwendungen so lange, wie Sie Ihre RPC-Aufrufe ziemlich grobe (was Sie sollten wirklich tun sowieso).
Sorry, das ist ein bisschen eine schnelle Antwort, aber: ich habe gehört, die Harz-app-server hat die Unterstützung für die Integration von java und PHP.
Sie behaupten, Sie können smash php und java zusammen: http://www.caucho.com/resin-3.0/quercus/
Habe ich Harz verwendet für die Zustellung von J2ee-Anwendungen, nicht aber für die PHP-Unterstützung.
Ich wäre daran interessiert zu hören von solchen Abenteuern.
Warum nicht web-service?
Machen Sie eine Java-Schicht, und setzen Sie ein ws-Zugriff(Achse, SpringWS, etc...) und den Php-Zugriff auf die Java-Schicht mit einer ws-client.
Ich denke, es ist einfach und nützlich.
Habe ich über diese Seite, das stellt ein Mittel zur Verbindung der beiden Schichten. Dennoch erfordert es eine mittlere Schicht (TCP/IP). Aber auch andere Dienste ausnutzen der Java-service als gut, weil es nimmt alle eingehenden verbindungen.
http://www.devx.com/Java/Article/20509
[Forschen...]