Hallo lieber Programmierfreunde,
ich habe mich nun extra hier angemeldet, da ich ein Problem habe, für das ich keine Erklärung finde.
Also zur Sache. Ich habe mich in den letzten Wochen sehr intensiv mit WebSockets beschäftigt. Ich bin nur ein Hobbyprogrammierer und habe mir sämtliches Material aus dem Internet gesucht, das ich brauche. Nun habe ich es tatsächlich endlich hinbekommen einen WebSocket zum laufen zu bringen.
Alleine das hat mich schon einiges an Nerven gekostet .
. 
Ich kann mich über die Console via Telnet auch super verbinden und kann was eintippen was mit Enter dann gesendet wird (PHP_NORMAL_READ).
Der Server erkennt auch wenn neue Benutzer hinzukommen.
Nun zu meinem Problem.
Sobald ich Daten eintippe oder eine neue Verbindung aufbaue, ist mir aufgefallen, dass die WHILE-Schleife, die eigentlich kontinuierlich laufen sollte,
stoppt.
Hier mal mein kleiner Quellcode. Ich hoffe ich bekomme schnell eure Hilfe =)
(mal ebend schnell auskommentiert. Ich hoffe das reicht so)
	
Vielen vielen Dank für eure Hilfe.
PS: Ich nehme extrem gerne Verbesserungsvorschläge entgegen =)
					ich habe mich nun extra hier angemeldet, da ich ein Problem habe, für das ich keine Erklärung finde.
Also zur Sache. Ich habe mich in den letzten Wochen sehr intensiv mit WebSockets beschäftigt. Ich bin nur ein Hobbyprogrammierer und habe mir sämtliches Material aus dem Internet gesucht, das ich brauche. Nun habe ich es tatsächlich endlich hinbekommen einen WebSocket zum laufen zu bringen.
Alleine das hat mich schon einiges an Nerven gekostet
 .
. Ich kann mich über die Console via Telnet auch super verbinden und kann was eintippen was mit Enter dann gesendet wird (PHP_NORMAL_READ).
Der Server erkennt auch wenn neue Benutzer hinzukommen.
Nun zu meinem Problem.
Sobald ich Daten eintippe oder eine neue Verbindung aufbaue, ist mir aufgefallen, dass die WHILE-Schleife, die eigentlich kontinuierlich laufen sollte,
stoppt.
Hier mal mein kleiner Quellcode. Ich hoffe ich bekomme schnell eure Hilfe =)
(mal ebend schnell auskommentiert. Ich hoffe das reicht so)
PHP-Code:
	
	
<?php
    // Fehlermeldung abschalten
    error_reporting(0);
    // Laufzeit auf Endlos stellen
    set_time_limit(0);
        
    class websocket
    {
        private $ip = '127.0.0.1' ;
        private $host = 8000 ;
        // Hier werden alle Socketverbindungen eingetragen
        private $clients = array();
        function __construct()
        {
            // Socket erzeugen ( Mastersocket )
            $this->socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
            // Socket mit Namen verbinden
            socket_bind($this->socket,$this->ip,$this->host);
            // Auf Verbindungen warten
            socket_listen($this->socket);
            // Alle Verbindungen werden hier gespeichert
            $clients = array($this->socket);
            // Endlosschleife
            while(true)
            {
                sleep(0);
                $read = $clients ;
                // Veränderung prüfen
                $change = socket_select($read, $w = NULL, $e = NULL, 0);
                // Prüfen ob es eine neue Verbindung gibt
                if($change == 1){
                    // Für den neuen Client seine Socket_ID zuweisen
                    $new_client = count($clients);
                    // Neuen Client in den Clientarray eintragen
                    $clients[$new_client] = socket_accept($this->socket);
                    // In der Konsole ausgeben
                    echo "#".$new_client." logged in\n" ;
                    // Bei dem neuem Client ausgeben
                    socket_write($clients[$new_client], "#".$new_client." logged in\n\r");
                } 
                // alle clienten durchgehen
                for($i = count($clients); $i>0; $i--)
                {
                    foreach($clients as $client)
                    {
                        // Prüfen on Client was geschrieben hat
                        if($buf = socket_read($client,2048,PHP_NORMAL_READ))
                        {
                            // Wenn mehr als 1 zeichen getippt wurde
                            if(strlen($buf)>=2)
                            {
                                // In der Konsole ausgeben
                                echo $client . " sagt " .$buf . "\n";
                            }
                        }
                    }
                }
            }
        }
    }
    $socket = new websocket;
?>
PS: Ich nehme extrem gerne Verbesserungsvorschläge entgegen =)
 
          
 
							
						
Kommentar