[C++/PHP] IPC tussen PHP script en C++ server

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ik heb een BitTorrent tracker (backend) in C++ en een frontend daarvoor in PHP.
In het frontend wil ik nu data gebruiken uit het backend, maar zonder gebruik te maken van (My)SQL.
Ook zou ik de backend code simpel en stateless willen houden.
Ik dacht aan het gebruik van UDP, omdat backend en frontend op dezelfde host draaien en 16 kbyte per UDP verzonden geen probleem is op de local interface.
Maar nu het probleem: Is het mogelijk de data op zo'n manier te versturen dat PHP het zelf kan 'unserializen' of moet ik in PHP de binaire data zelf decoden?
En zijn er nog andere, mogelijk betere of simpelere oplossingen?

[ Voor 3% gewijzigd door Olaf van der Spek op 03-05-2004 14:55 ]


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
De mogelijkheden zijn legio. Het hangt er een beetje vanaf hoe ingewikkeld je protocol wordt en hoe je de 'moeite' over front-end en back-end wil verdelen.

Een manier is om gegevens te serializen met PHP's serialize/unserialize functies, maar dit betekent wel dat je zelf code moet schrijven om deze data weer te unserializen/serializen aan in C++.

Serializeren naar XML is ook een flexibele optie, maar vereist wel de beschikbaarheid van XML libraries aan beide kanten. Bovendien is het genereren en inlezen van XML documenten soms wel een hoop gedoe.

Voor het verwerken van binaire data kun je in PHP wel met de Perl-style pack/unpack functies uit de voeten. Als het protocol een beetje simpel is, is dit denk ik de meest makkelijke oplossing.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Ik zou zelf ervoor kiezen om de backend als XML webservice te laten fungeren denk ik. Dit vereist alleen XML-libs als je echt complexe dingen wil uithalen, voor simpelweg wat data op en neer stuiteren is een simpele printf bij wijze van spreken genoeg om wat XML te formatteren waar PHP zich makkelijk doorheen kan ploegen.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

Als je windows gebruikt is COM misschien een makkelijke optie, en anders misschien iets als CORBA of SOAP? Dit zorgt voor een wat naadlozere aansluiting, en het stelt je dus bijvoorbeeld in staat om vanuit de ene taal een functie aan te roepen in de andere taal

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • seweso
  • Registratie: Augustus 2003
  • Laatst online: 04-04-2018

seweso

de mouw is uit de aap

Is de informatie-stroom vooral één richting op? Dus richting client. Dan is ff wat xml genereren en beschikbaar stellen op een socket misschien wel snelle oplossing. Dan kun je middels PHP/XSLT heen snel de gegevens (zonder veel programmeer-werk) als (x)html presenteren.

Dat zou ik doen...

seweso's blog


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
CORBA met PHP is in ieder geval geen aanrader. De language binding is niet gestandaardiseerd en er zijn maar een stuk of twee experimentele modules beschikbaar, die maar een deel van de functionaliteit implementeren en zelf ook weer allemaal ingewikkelde eisen stellen aan de beschikbaarheid van libraries en dergelijke.

Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

OlafvdSpek schreef op 03 mei 2004 @ 14:55:
En zijn er nog andere, mogelijk betere of simpelere oplossingen?
Een pipe openen, of desnoods een TCP connectie en daar een string geengooien ? Da's simpel te parsen, en je hebt geen problemen met alignment ed.

Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Het is een single-threaded server (met select-model), dus TCP is geen optie (vereist state in de server). Het moet verder onder zowel Linux als Windows draaien.
Die PHP serialize functie had ik niet gevonden, maar die lijkt wel interessant. Daar ga ik eens naar kijken.

Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

OlafvdSpek schreef op 03 mei 2004 @ 17:46:
Het is een single-threaded server (met select-model), dus TCP is geen optie (vereist state in de server).
Ik snap het verband niet tussen state en TCP niet echt.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

igmar schreef op 04 mei 2004 @ 16:43:
[...]


Ik snap het verband niet tussen state en TCP niet echt.
Ik in dit geval ook niet :? Het OS handelt layers 2 en 3 af voor je, dus of je UDP of TCP gebruikt is transparant voor je applicatie, of je nu select of multithreading gebruikt.

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
De server moet dan een lijst met open TCP connecties (state) bijhouden en dat probeer ik te voorkomen (stateless).
Pagina: 1