Connecter code PHP Java backend
Je mets en place un site web en utilisant PHP pour le front-end et un service Java en tant que back-end. Les deux parties sont comme suit:
- PHP front-end écoute les requêtes http et interagit avec la base de données.
- La Java back-end fonctionner en continu et répond à des appels à partir de l'extrémité avant.
Plus précisément, l'extrémité arrière est un démon qui se connecte et maintenir le lien à plusieurs services de messagerie instantanée (AOL, MSN, Yahoo, Jabber...).
Les deux couches seront déployés sur le même système (CentOS boîte, je suppose) et l'introduction d'une couche intermédiaire (par exemple: à l'aide de XML-RPC) permettra de réduire la performance (la ressource est également assez limitée).
Question: Est-il un moyen de relier les deux couches directement? (pas plus de services web entre les deux)
OriginalL'auteur ThoaiOnline | 2009-05-21
Vous devez vous connecter pour publier un commentaire.
Puisque c'est la communication entre les deux processus en cours d'exécution, un "direct" appel (comme dans JNI) n'est pas possible. La plus simple des façons de faire de telles interprocessus communcation sont probablement les canaux nommés et les sockets réseau. Dans les deux cas, vous devrez définir un protocole de communication et la mettre en œuvre sur les deux côtés. À l'aide d'un protocole standard tels que XML-RPC rend cela plus facile, mais n'est pas strictement nécessaire.
OriginalL'auteur Michael Borgwardt
Il y a généralement quatre modèles pour l'intégration de l'application:
Chacun de ces modèles présente des avantages et des inconvénients, mais une bonne règle de base est de choisir celui avec le plus lâche de couplage que vous pouvez sortir avec. Par exemple, si vous avez sélectionné #4 votre application Java peut se bloquer, sans prendre vers le bas de votre PHP app.
Je vous suggère avant de regarder spécifiques des bibliothèques ou des technologies mentionnées dans les réponses ici que vous choisissez le bon modèle pour vous, puis d'enquêter sur vos options spécifiques.
OriginalL'auteur Robert Campbell
J'ai essayé PHP-Java bridge(php-java-bridge.sourceforge.net/pjb/) et il fonctionne très bien. Fondamentalement, nous avons besoin d'exécuter un fichier jar (JavaBridge.jar) qui écoute sur le port(plusieurs options sont disponibles, comme le socket Local, le port 8080 et ainsi de suite). Vos fichiers de classe java doit être disponible pour le JavaBridge dans le classpath. Vous avez besoin d'inclure un fichier Java.inc dans votre php et vous pouvez accéder à la classe Java.
OriginalL'auteur Naveen
Sûr, il ya beaucoup de façons, mais vous avez dit au sujet de la ressource limitée...
À mon humble avis, définir vos propres léger RPC-comme protocole et utiliser des sockets TCP/IP pour communiquer. En fait, dans ce cas, il n'y a pas besoin d'utiliser à plein les avantages de la RPC, etc... il Vous suffit de définir une API pour ce cas particulier et de mettre en œuvre sur les deux côtés. Dans ce cas, vous pouvez sérialiser vos paquets à très petit. Vous pouvez même attribuer une sorte de Guid de votre télécommande les méthodes et les utiliser pour gagner du trafic et de la vitesse de votre communication.
L'avantage de l'utilisation des sockets, c'est que votre solution sera assez évolutif.
OriginalL'auteur Jet
Vous pouvez essayer de le PHP/Java intégration.
Aussi, si la communication est unidirectionnelle (quelque chose comme "sendmail pour IM"), vous pouvez écrire les requêtes PHP dans un fichier et un moniteur dans votre application Java.
De l'Introduction: "Avertissement: Cette extension est EXPÉRIMENTAL. Le comportement de cette extension, y compris les noms de ses fonctions et de toute autre documentation concernant cette extension peut changer sans préavis dans une future version de PHP. Cette extension devrait être utilisé à vos propres risques."
Il a été expérimentales pour quelques années maintenant que j'ai lu comme "abandonné". C'est une couche intermédiaire de toute façon - je ne suis pas sûr si c'est possible de le faire en Java et PHP interface directement sans) à l'aide de certains couche intermédiaire, ou b) de la rédaction de votre propre.
OriginalL'auteur Piskvor
J'ai aussi été confronté à ce problème récemment. La Résine en solution ci-dessus est en fait une réécriture complète de PHP, en Java, le long de la lignes de JRuby, Jython et Rhino. Il est appelé Quercus. Mais je suppose que pour vous comme pour moi, de les jeter votre Apache/PHP n'est pas vraiment une option.
Et il y a plus de problèmes avec Quercus d'ailleurs: la version gratuite est GPL, ce qui est difficile si vous êtes l'élaboration d'un logiciel commercial (mais pas aussi difficile que la Résine voudrait nous le faire croire (mais IANAL)) et en plus de cela, la version gratuite ne prend pas en charge la compilation de code octet, donc c'est en fait un interpréteur écrit en Java.
Ce que j'ai décidé sur la fin était juste échanger des messages simples sur HTTP. J'ai utilisé PHP
json_encode()
/json_decode()
et de Java json-lib pour coder les messages en JSON (simple, à base de texte, un bon match pour le modèle de données).Un autre site intéressant et de la lumière-poids de l'option Java générer du code PHP et ensuite utiliser PHP include() directive pour récupérer cette sur HTTP et de l'exécuter. Je n'ai pas essayé cette même si.
Si son la HTTP réel les appels que vous êtes préoccupé (pour la performance), aucune de ces solutions ne pourront y aider. Tout ce que je peux dire, c'est que je n'ai pas eu de problèmes avec le PHP et Java sur le même réseau local. Mon sentiment est que ce ne sera pas un problème pour la grande majorité des applications, aussi longtemps que vous gardez vos appels RPC assez sûr-grain (que vous devriez vraiment faire de toute façon).
OriginalL'auteur Ramon
Désolé, c'est un peu une réponse rapide mais: j'ai entendu la Résine serveur d'application a l'appui pour l'intégration de java et PHP.
Ils prétendent qu'ils peuvent smash php et java ensemble: http://www.caucho.com/resin-3.0/quercus/
J'ai utilisé de la résine pour servir des applications J2ee, mais pas pour son support de PHP.
Je serais intéressé d'entendre de telles aventures.
OriginalL'auteur chickeninabiscuit
Pourquoi ne pas utiliser le service web?
Faire une Java couche et mettre un ws accès(Axe, SpringWS, etc...) et le Php accéder à la Java couche à l'aide d'un ws client.
Je pense que c'est simple et utile.
OriginalL'auteur rresino
Je suis tombé sur cette page qui introduit un lien entre les deux couches. Cependant, elle nécessite encore une couche intermédiaire (TCP/IP). En outre, d'autres services peuvent exploiter le service Java ainsi parce qu'elle accepte toutes les connexions entrantes.
http://www.devx.com/Java/Article/20509
[Recherches...]
OriginalL'auteur ThoaiOnline