kostenloser Webspace werbefrei: lima-city


problem mit socket_accept()

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    unsu

    unsu hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. c*********c

    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
  4. Autor dieses Themas

    unsu

    unsu hat kostenlosen Webspace.

    ich habs befürchtet :-(

    danke für die antwort
  5. h******0

    Öhhhmmmmmmmmm Daemons per php? Daemons macht man mit c++.

    php kannst du bei nem error nicht beenden teilweise
  6. Die Funktion "socket_select ()" sollte dir helfen.
    http://de.php.net/socket_select

    Beispiel-Code :
    http://cycase.de/projekte.html#cyServer ;-)

    MfG Lucas
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!