problem mit socket_accept()
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
antwort
aufruf
beispiel
beitrag
bestimmter zeitpunkt
client
entsprechende funktionen
error
funktion
gedanken
kontakt
multithreading
sinnvolle lsung
socket
sprache
teilweise
unglcklicherweise
-
wie der titel schon sagt, habe ein problem mit socket_accept
das script soll halt (unendlich) lange laufen und immer abwechselnd überprüfen, ob ein bestimmter zeitpunkt erreicht ist und ob jemand mit dem socket kontakt aufnimmt, und dann immer entsprechende funktionen aufrufen:
define("kein_element", -1); ini_set("max_execution_time", 0); $array = array(); $sended = array(); $leer = kein_element; $start = kein_element; $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_bind($sock, '127.0.0.1', 2000); socket_listen($sock); while(true) { if($client = socket_accept($sock)) { $data = socket_read($client, 1024); new_msg($data); socket_close($client); } if(($array[$start]["time"] <= mktime()) and ($start != kein_element)) { build(); } }
die anderen funktionen hab ich mal weggelassen, da sie für das problem unwichtig sind
das problem ist jetzt, dass socket_accept so lange wartet, BIS jemand kontakt aufnimmt, die zeit überpfüfung wird also immer nur ausgeführt, wenn direkt vorher jemand über den socket kontakt aufgenommen hat... und da liegt halt das problem, hab halt keine idee, wie ich das umgehen könnte -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
die anderen funktionen hab ich mal weggelassen, da sie für das problem unwichtig sind
Jemand, der sich auch mal Gedanken dazu macht *freu*
das problem ist jetzt, dass socket_accept so lange wartet, BIS jemand kontakt aufnimmt, die zeit überpfüfung wird also immer nur ausgeführt, wenn direkt vorher jemand über den socket kontakt aufgenommen hat... und da liegt halt das problem, hab halt keine idee, wie ich das umgehen könnte
Die einzig sinnvolle Lösung scheint der Weg über das Multithreading[1]. Unglücklicherweise unterstützt PHP dies nicht (AFAIK).
Somit musst Du - wohl oder übel - auf eine andere Sprache wie bspw. Perl oder noch besser: C/C++ umsteigen.
[1] http://de.wikipedia.org/wiki/Multithreading
Beitrag geändert: 23.10.2006 16:20:26 von compactdisc -
Die Funktion "socket_select ()" sollte dir helfen.
http://de.php.net/socket_select
Beispiel-Code :
http://cycase.de/projekte.html#cyServer
MfG Lucas -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage