Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP/??] Meerdere vaste socket verbindingen

Pagina: 1
Acties:

  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 21:50
Ik wil via internet wat hardware aansturen. Deze hardware is bereikbaar via ethernet, dankzij een Netburner UART -> Ethernet, zodat ik direct kan communiceren. Deze kastjes zijn via internet aangesloten zodat ik via een website dat ding kan aansturen. Commando's sturen gaat opzich prima door een socket open te zetten, commando sturen en weer sluiten.

Nu wil ik echter ook alle uitgaande berichten ontvangen (bijvoorbeeld statusberichten), maar wel commando's kunnen blijven aansturen.
Als ik de verbinding open met een while-lus, en blijf luisteren, haalt hij wel data binnen, maar op een gegeven komt er geen data meer en krijgt hij een time-out. Bovendien is deze lus blocking, dus als ik die continu laat binnenhalen, kan ik geen data meer versturen via dezelfde stream.

Hebben jullie hier een goede oplossing voor? Ik gebruik nu stream_socket_client() voor het verbinden, stream_get_contents() voor lezen en fwrite() voor schrijven.

Is PHP wel een goede manier om 24/7 zo'n stream open te houden, of zou iets van een queue met te versturen berichten, die steeds tussen het luisteren door komt iets zijn?

  • Knetterhard
  • Registratie: November 2009
  • Laatst online: 19-11 08:33

Knetterhard

Dedicated

Volgens mij komt dit dan aan meerdere threads; of te wel; php kan niet meerdere dingen tegelijkertijd uitvoeren toch? (correct me if im wrong).

Ik geloof dat hier het een en ander wel wat te vinden is op het internet; wellicht bied dit dan ook een degelijke oplossing voor je.

[ Voor 18% gewijzigd door Knetterhard op 28-11-2012 12:42 ]


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 21:50
Nee, maar ik kan natuurlijk wel in de achtergrond een of meerdere processen laten draaien. Ik kan alleen niet tegelijk met een script luisteren (op de achtergrond) en ook nog met de webinterface commando's sturen, omdat de socket dan al geopend is.

Ik kan volgens mij wel gewoon meerdere verbindingen openen, dus dat is niet het probleem, alleen het openen/delen van de socket zodat ik kan versturen+luisteren continu.

  • Erwin537
  • Registratie: December 2008
  • Laatst online: 18:25
Nu ben ik een leek op het wat meer geadvanceerde gebied waar ik dit onder tel, maar valt dit niet te doen met NodeJS? Daarmee kan je luisteren op poorten (en berichten versturen).

Een tijdje geleden heb ik een introductie gekeken waarin dit voorbij kwam. Dat is toch ruw weg wat je zoekt? (exacte begintijd kan ik op het moment even niet luisteren)
YouTube: Introduction to Node.js with Ryan Dahl

  • Pizzalucht
  • Registratie: Januari 2011
  • Laatst online: 22:08

Pizzalucht

Snotneus.

Je kan de socket timeout aanpassen in PHP, standaard 60s volgens mij.
Als je meerdere verbindingen wil zou ik inderdaad naar iets anders kijken, NodeJS of Python.

Zelf zou ik voor Python + Twisted gaan.

Misschien kan je wat met dit voorbeeld:
http://twistedmatrix.com/.../examples/simpleclient.py

[ Voor 40% gewijzigd door Pizzalucht op 28-11-2012 14:07 ]


  • Hydra
  • Registratie: September 2000
  • Laatst online: 06-10 13:59
Je kunt ook een simpele webservice (met Node.js, Python, Java, wat je wil) maken waar je naartoe connect met je webpagina natuurlijk.

https://niels.nu


  • Barryvdh
  • Registratie: Juni 2003
  • Laatst online: 21:50
Dus een (web)service draaien die alle verbindingen beheert, en zodra hij een request binnenkrijgt, dat doorstuurt verwerkt en via de goede socket verstuurd?
Ik zal ook eens kijken naar Ratchet en/of React/socket, wat EventDriven zou moeten zijn.
Pagina: 1