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