9
votes

Communication PHP avec application C ++

Je cherche Google depuis un moment, mais le problème que je cours est je ne suis pas vraiment sûr de ce que je dois rechercher. (La recherche de la communication PHP C ++ ne semble pas être ce dont j'ai besoin), je développe essentiellement un plug-in C ++ pour un serveur de jeu et je voudrais créer une interface Web pouvant transmettre / tirer des données vers et depuis le plugin C ++. Le jeu utilise déjà un port RCON pour un accès administratif à distance, mais je suis tombé sur un en-tête pour l'interface réseau qu'ils utilisent, alors je suppose que je pourrais l'utiliser.

Mon problème est que je ne suis pas très familier avec les sockets. Je suppose que je devrais fondamentalement ouvrir une prise en C ++ et laisser l'écoute, puis dans la PHP, connectez-vous à cette prise, passez les données et fermez-la.

Voici l'interface ... http://www.ampaste.net/m2f6b6dbc

Je vais surtout simplement tirer des informations telles que la liste actuelle des joueurs, des noms et des scores connectés. Et transmettre des commandes pour redémarrer le serveur, la fermer, etc.

Toute aide serait géniale, merci!


0 commentaires

5 Réponses :


3
votes

J'oserais vous recommander d'utiliser certains moyens standard de communication de composants distribués, par exemple, XML RPC. Il existe des bibliothèques pour PHP et C ++: http://en.wikipedia.org/wiki/ XML-RPC # implémentations

Cette approche vous empêchera de réinventer la roue lors de la mise en oeuvre du protocole de communication et fera moins d'entretien moins cher.


0 commentaires

0
votes

Ce qu'il apparaît que vous souhaitez que Google est C ++ client / serveur. Je pourrais suggérer deux approches ici.

Tout d'abord, il s'agirait de créer un serveur de protocole HTTP très basique de sorte que votre script PHP puisse simplement aller à http: // Yourip / < / a> et envoyer vos commandes via les variables de poste. Vous pouvez trouver un exemple de serveur Web C ++ à l'adresse suivante: https://stackoverflow.com/questions/175507/ CC-Web-Server-Library

La deuxième approche qui permet à une grande plus grande flexibilité est de créer votre propre protocole de base et utilisez les sockets PHP pour vous connecter au serveur et envoyer des commandes. Vous pouvez trouver un exemple d'application client / serveur C ++ sur http: //www.codeproject .COM / KB / IP / Client_Server_socket.aspx . Gardez à l'esprit, pour l'extrémité C ++, vous ne vous inquiétez que de la partie serveur. Vous pouvez trouver un client Ping de base en PHP, à l'aide des sockets, à l'URL suivante: http://www.planet-source-code.com/vb/scripts/showcode.asp?lngwid=8&txtcodeid=1786 . Il existe également des cours pour gérer la majeure partie de la partie de protocole, même si je ne suis au courant de ce travail pour les deux langues.

Veuillez noter que je n'ai testé aucun des codes que je liés. Je les ai simplement trouvés sur Google.


0 commentaires

0
votes

Un bon endroit pour démarrer serait http://php.net/manual/fr /book.sockets.php .

Fondamentalement, vous allez créer un autre port d'administration à distance et une méthode de php à connecter. Naturellement, si vous allez accepter uniquement la communication Web d'une adresse IP, c'est un bon moyen de le sécuriser (vérifier et permettre l'accès à une seule adresse IP qui connectera). Cependant, vous aurez besoin du serveur C ++ pour écouter sur un port (sécurisé?) Et avez-vous connecter PHP (tant que l'hôte le permet).

SO GLOBAL, si vous avez déjà un serveur en cours d'exécution, cela doit être simple du côté C ++. Tout ce que vous avez à faire de la partie PHP est vraiment des recherches relatives à différents serveurs et de transmettre des informations (que PHP est plus que capable de faire efficacement)

Mais, c'est évidemment une alternative à l'affiche 2. Je profite personnellement (dans de nombreux cas) "réinventer la roue" afin de pouvoir gérer mon propre travail. Mais bien sûr, cela n'est pas toujours efficace par le coût ou autrement.

bonne chance!


0 commentaires

5
votes

vous pouvez essayer l'épargne. Il a été écrit par les ingénieurs sur Facebook, et c'est maintenant un projet Apache.

L'épargne est un cadre logiciel pour le développement des services transversal évolutif. Il combine une pile de logiciels avec un moteur de génération de code pour créer des services qui fonctionnent de manière efficace et de manière transparente entre C ++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C #, Cocoa, SmallTalk et Ocaml.

link: http://incubator.apache.org/thrif/

En bref, il fait exactement ce que vous essayez de faire. Cela facilite la communication de différentes langues. Plutôt que d'essayer de proposer un protocole basé sur la prise de courant pour la communication, vous pouvez appeler une fonction de php comme celle-ci: xxx

et elle se connecte automatiquement dans une fonction nommée getScores dans votre Programme C / C ++. Le seul inconvénient est qu'il peut s'agir d'une douleur à configurer correctement.


0 commentaires

3
votes

Je suppose que je vais essentiellement besoin d'ouvrir une prise en C ++ et de la laisser à l'écoute

err, oui, c'est la description que je donnerais à ma fille de 12 ans - mais si vous aurez plus d'un client qui connecte un peu plus impliqué. Surtout si vous boulez le code sur un serveur existant. Donc, j'ai une lecture du FAQ de programmation de socket .

Vous devez définir un protocole de la manière dont les données seront représentées lorsque vous voyagez sur la prise. Il y a beaucoup de méthodes standard - mais parfois des choses comme le Corba / le savon, etc. peuvent simplement être surchargées et plus d'efforts que de partir de zéro.

Si vous boulez du code ONTP Un serveur existant, la vie sera beaucoup plus simple si vous utilisez la prise actuelle et étendez le protocole si nécessaire.

Il existe 3 modèles d'écriture d'un serveur de socket - l'extrait de code que vous avez fourni ne semble pas inclure des détails sur lesquels vous travaillez actuellement:

  1. Forking Server (peut diviser les filets plutôt que les processus)
  2. Server à une seule-fileté
  3. Secteur sans socket

    Forking Server
    • Une instance du serveur est démarrée (appelez-la p1), appelant SetSID ()
    • P1 commence à écouter sur la prise correspondante
    • Un client essaie de se connecter
    • P1 FOURKS pour créer P2
    • P2 accepte ensuite la connexion et commence à conversation avec le client
    • P1 continue d'écouter d'autres connexions
    • P2 quitte la fermeture de la connexion

      Il y a des variations de ceci - P2 peut accepter d'autres connexions, P1 pourrait une fourchette avant une connexion à venir)

      Un seul fileté
      • Une instance du serveur est démarrée, appelant SetSid ()
      • Il commence à écouter une connexion et crée une matrimonie des sockets utilisées (y compris la première fois)
      • socket_sket () est utilisé pour identifier l'activité de l'une quelconque des sockets
      • Lorsqu'un client se connecte, la connexion est acceptée et ajoutée à un tableau de connexions
      • Chaque fois que socket_select () renvoie une activité sur l'une des sockets, le serveur genède une réponse appropriée / ferme la prise / lie la nouvelle connexion

        Server sans socket
        • Certains processus (par exemple, inetd) gère toute la prise de douille
        • Lorsqu'un client se connecte, cet autre serveur démarre une instance de votre programme et lie la prise E / S au STDIN / STDOUT de votre programme
        • Lorsque votre programme quitte votre programme, l'autre processus ferme la prise (si elle est toujours ouverte) et gère le nettoyage (par exemple, s'il est implémenté comme serveur de forking, le processus engendré peut terminer)


1 commentaires

Ceci est une explication fraîche d'introduction! Maintenant, si je peux juste envelopper mon cerveau de 12 ans de 12 ans autour du concept de multithreading ...