Mailinglisten-Archive |
Am 01.12.2004 15:14 Uhr schrieb "Bernhard Kraft" unter <kraftb at mokka.at>: > 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 ? > Ich hab grade in der PHP-Doku eine Funktionalität gefunden, die dir unter umständen helfen könnte: http://de2.php.net/manual/de/ref.pcntl.php Ich hab selbst noch nie damit experimentiert, bin nur kürzlich mal drübergestollpert Grüße Andreas -- wdv Medien & Kommunikation GmbH & Co. OHG Mediendatenverarbeitung Andreas Heigl Siemensstrasse 6 61352 Bad Homburg Germany Telefon +49-(0)6172-670-185 Telefax +49-(0)6172-670-181 www.wdv.de
php::bar PHP Wiki - Listenarchive