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

[PHP5] TCP Socket connection reuse

Pagina: 1
Acties:
  • 219 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
In PHP5 maak ik een TCP socket aan met stream_socket_create(). Deze verbind aan een logger deamon die ergens op het netwerk draait en pomp daar log gegevens in (dit omdat er meerdere applicatieserver zijn die ik allemaal naar dezelfde deamon wilt laten loggen).

Bij elke request wordt er een connectie met de logger daemon opgezet, die aan het einde van de request weer wordt gesloten. Aangezien de sites die van deze logger daemon gebruik maken nogal behoorlijk goed bezocht worden, worden er heel veel connecties gemaakt (en ook weer gesloten)

Nu lees ik de docs van unix sockets dat het aan de client is om SOCKET REUSE te implerenteren (zodat de in time_wait state blijven staan om laten te worden hergebruikt).

Hoe kan ik nu aan php vertellen dat de connecties moeten worden hergebruikt? (het gaat hier niet om persistent connecties)

  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05 09:40

GX

Nee.

Ik heb het nooit met PHP gedaan, maar volgens mij moet je dit hebben:

http://nl.php.net/manual/en/function.socket-set-option.php

Alleen dit werkt met sockets uit socket_create(), niet stream_socket_* ..

  • ZroBioNe
  • Registratie: Augustus 2001
  • Niet online
Je php applicatie gaat toch na elke GET/POST request dood?
Ik bedoel, je kan geen objecten laten bestaan als er niets gebeurt op de site..

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Zou je hem niet ontzettend ranzig in een session kunnen serializen? >:)

iOS developer


  • linde002
  • Registratie: Mei 2004
  • Laatst online: 01-02-2021
Een socket is een resource welke je helaas niet kunt serializen in een sessie, resources worden vernietigd wanneer het script stopt. Gezien het feit dat een PHP script (wanneer je deze webbased aanroept) uitgevoerd wordt totdat het einde van het script bereikt is (of wanneer je de maximale runtime hebt bereikt) kun je je sockets niet herbruiken.

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 20:57
Verwijderd schreef op dinsdag 18 december 2007 @ 21:16:
Hoe kan ik nu aan php vertellen dat de connecties moeten worden hergebruikt? (het gaat hier niet om persistent connecties)
Correct me if I'm wrong, maar is dat niet exact waar het wel om gaat? :?

Als je een persistant connectie hebt (met pfsockopen bijvoorbeeld) zal afaik PHP de connectie niet afsluiten bij het einde van het script en de volgende keer dezelfde connectie weer gebruiken. Precies wat je wilt dus lijkt me? :?

[ Site ] [ twitch ] [ jijbuis ]


  • linde002
  • Registratie: Mei 2004
  • Laatst online: 01-02-2021
Lees wel het commentaar van pfsockopen. Er zitten nogal een aantal haken en ogen aan het gebruik.

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50

BikkelZ

CMD+Z

Soms is het gewoon fijn om een persistente applicatie te hebben op de achtergrond. Dan ga je toch sneller naar dingen als Java kijken.

iOS developer


  • FragFrog
  • Registratie: September 2001
  • Laatst online: 20:57
linde002 schreef op donderdag 20 december 2007 @ 11:59:
Lees wel het commentaar van pfsockopen. Er zitten nogal een aantal haken en ogen aan het gebruik.
Natuurlijk, maar die zijn inherrent aan het gebruik van persistente connecties, dus dat is geen punt als je al besloten hebt dat je connecties open wilt laten om ze later weer te kunnen gebruiken.

Truth be told denk ik niet dat het veel verschil zal maken either way, maar dat terzijde :+

[ Site ] [ twitch ] [ jijbuis ]


  • linde002
  • Registratie: Mei 2004
  • Laatst online: 01-02-2021
Ik bedoelde meer dat het bij bepaalde serverconfiguraties niet werkt. Waardoor je dus uiteindelijk toch weer single use sockets maakt :P

Verwijderd

of je gebruikt een connection-less protocol zoals UDP.

Je server-kant moet dat ook ondersteunen maar dan stuur je gewoon een UDP datagram en wacht op de verificatie tot dat het is ontvangen want UDP garandeert niet dat je pakket aankomt zoals TCP dat standaard voor je afhandelt. Je zult dat nu zelf moeten doen. het is niet erg moeilijk, gewoon een ttl voor ieder verstuurd pakket berekenen en een uniek id meesturen wat de log-deamon ook weer terug moet sturen als bevestiging. voorwaarde is dus wel dat je log-deamon dit allemaal ondersteunt.

je enige andere alternatief pfsockopen() maar check je server en lees de docs want hier zitten zoals gezegd wel wat haken en ogen aan. er zijn gevallen waar pfsockopen() zelfs trager is.

[ Voor 14% gewijzigd door Verwijderd op 24-12-2007 02:38 ]

Pagina: 1