Websocket While

  • PHP

    Websocket While

    Hallo Zusammen :)

    ich arbeite an einer Seite die sich mit einem Websocket in meinem Localen Netzwerk befindet verbindet. Ein kleiner ausschnitt vom dem Script sieht so aus:

    Quellcode

    1. while (true) {
    2. $changed = $clients;
    3. socket_select($changed, $null, $null, 0, 10);
    4. if (in_array($socket, $changed)) {
    5. $socket_new = socket_accept($socket);
    6. $clients[] = $socket_new;
    7. $header = socket_read($socket_new, 1024);
    8. perform_handshaking($header, $socket_new, $host, $port);
    9. socket_getpeername($socket_new, $ip);
    10. $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' connected')));
    11. send_message($response);
    12. $found_socket = array_search($socket, $changed);
    13. unset($changed[$found_socket]);
    14. }
    15. foreach ($changed as $changed_socket) {
    16. while(socket_recv($changed_socket, $buf, 1024, 0) >= 1)
    17. {
    18. $received_text = unmask($buf);
    19. $tst_msg = json_decode($received_text);
    20. $user_name = $tst_msg->name;
    21. $user_message = $tst_msg->message;
    22. $user_color = $tst_msg->color;
    23. $response_text = mask(json_encode(array('type'=>'usermsg', 'name'=>$user_name, 'message'=>$user_message, 'color'=>$user_color)));
    24. send_message($response_text);
    25. break 2;
    26. }
    27. $buf = @socket_read($changed_socket, 1024, PHP_NORMAL_READ);
    28. if ($buf === false) {
    29. $found_socket = array_search($changed_socket, $clients);
    30. socket_getpeername($changed_socket, $ip);
    31. unset($clients[$found_socket]);
    32. $response = mask(json_encode(array('type'=>'system', 'message'=>$ip.' disconnected')));
    33. send_message($response);
    34. }
    35. }
    36. }


    Es funktioniert auch alles super, bekomme auch die Message (wie z.B Connected siehe Zeile 11). Aber nun möchte ich, dass der Socket nicht nur Verbindungen aufnehmen soll sondern, auch Nachrichten Verschicken soll in einem 5 Sekunden Takt. Ich habe überlegt gehabt über eine While den befehl send_message auszuführen, aber dann hängt sich die Seite auf bzw. die Verbindung zum Socket wird unterbrochen.


    Wäre Nett wenn ihr mir dabei weiter helfen könntet, weil ich schon keine Ahnung habe, was ich nun da machen soll. ?(


    Lg. Georg