phpbar.de logo

Mailinglisten-Archive

[php] Warten auf Event (socket_accept + msg_receive)

[php] Warten auf Event (socket_accept + msg_receive)

Bernhard Kraft kraftb at mokka.at
Mit Dez 1 15:14:34 CET 2004


Hallo !

Ich hab mich soeben auf dieser Mailingliste subscribed und hoffe jemand
von euch kann mir bei einem Problem weiterhelfen.

Mein Problem ist folgendes:
Ich habe eine PHP Applikation die ständig am laufen ist
(set_time_limit(0))
Die applikation wird nicht über den apache aufgerufen sondern
auf der kommandozeile gestartet.

In der Applikation muss ich einen TCP/IP (AF_INET) socket öffnen und einen
server socket initialisieren. Der Server socket wartet dann mit
$msgsock = socket_accept($server_sock);
auf eine verbindung von aussen ....
Wenn eine Verbindung aufgebaut wird kann diese nicht komplett abgehandelt
werden sondern sie muss beständig offen bleiben.

Und hier liegt auch schon das problem: ich müsste nebenbei noch auf eine
Benachrichtigung per IPC (messages, semaphoren) warten. kommt nämlich per
IPC eine benachrichtigung muss auf die bereits verbundenen sockets etwas
rausgeschickt werden.

ich muss also gleichzeitig auf dem socket listen ob sich jemand verbindet
und währenddessen per IPC auf input warten.

hätte ich threads zur verfügung wäre das alles keine problem aber soviel
ich mich bis jetzt schlau gemacht habe gibts nicht mal im neuen PHP5 threads.

Wie kann ich sowas also lösen ?

Die einzige Lösung die mir bis jetzt eingefallen ist ist die das ich den
socket auf non_blocking schalte und so mit socket_accept() immer gucken kann
ob sich ein neuer client verbinden will ...
und danach kann ich mit msg_receive() und dem MSG_IPC_NOWAIT flag nachsehen
ob eine neue message angekommen ist ...

was mir an dieser lösung nicht gefällt ist das ich wenn ich diese beiden
funktionen hintereinander aufrufe und dazwischen nirgendwo ein usleep() einbaue
100% CPU Auslastung erreiche ... was ja nicht unbedingt wünschenswert ist
baue ich ein usleep() ein reagiert die anwendung nicht mehr schnell (so schnell
wie möglich)


hints ?


grüsse,
Bernhard
-----------------------------------------
Bernhard Kraft
<kraftb at mokka.at>

MOKKA MEDIENAGENTUR GMBH
Mariahilferstrasse 170
1150 Wien
T: 01 895 33 33 50
M: 0676 560 14 14
F: 01 895 33 33 20
www.mokka.at
-----------------------------------------


php::bar PHP Wiki   -   Listenarchive