Mailinglisten-Archive |
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