1. #1

    Registriert seit
    18.12.2011
    Beiträge
    159
    Thanked 182 Times in 98 Posts
    Blog Entries
    2

    Standard [PHP] Listener

    Hallo,
    Heute habe ich an einem Listener gearbeitet mit Multithreading, dafür habe ich mir aus dritter Quelle eine kleine Klasse geholt um in PHP zu „threaden”.
    Das ganze soll noch ein funktionierender Chatserver werden in PHP, aufgefallen ist mir nur, dass er nur Verbindungen vom localhost annimmt. Ich hoffe jemand hat eine Idee warum das so ist.

    PHP-Code:
    <?php
    require_once("thread.php");
    class 
    Client {
        public 
    $username;
        private 
    $client_sock;
        
        public function 
    __construct($client_sock$username) {
            
    $this->username $username;
            
    $this->client_sock $client_sock;
        }    
    }

    class 
    Server {
        public 
    $ip;
        public 
    $port;
        private 
    $wfc_thread;
        private 
    $server_sock;
        public 
    $clientlist;
        
        public function 
    __construct($ip$port) {
            
    $this->ip $ip;
            
    $this->port $port;
            
    $this->clientlist = array();
            
            
    $this->server_sock socket_create(AF_INETSOCK_STREAMSOL_TCP);
            
    socket_bind($this->server_sock$this->ip$this->port);
            
    socket_listen($this->server_sock);
            
            
    $this->wfc_thread = new Thread(array($this"waitForClients"));
            
    $this->wfc_thread->start(10"listen_clients");
        }
        
        public function 
    waitForClients($_limit$_name) {
            while(
    true) {
                
    $inc_client socket_accept($this->server_sock);
                if(
    $inc_client !== false) {
                    
    printf("[!] NEW CLIENT INCOMING\n");
                    for(
    $i 0$i <= count($this->clientlist); $i++) {
                        if(
    is_null($this->clientlist[$i])) {
                            
    $this->clientlist[$i] = new Client($inc_clientrand(1,1000));
                            break;
                        }
                    }
                }
                
                
    sleep(1);
            }
        }
    }

    $server = new Server("127.0.0.1"6565);
    while(
    true) { sleep(1); }
    ?>
    Sagen wir mal, dass ist die Vorstufe meines Chatservers in PHP.
    Der Server läuft aber nur unter Linux und wer es schon gemerkt hat, dass ganze startet man über die Shell.
    Code:
    php5 chatsrv.php
    Die thread.php für das Multithreading findet ihr hier. Ich habe aber an der PHP eine Zeile zu meinem Gunsten geändert, daher, falls ihr meinen Server verwenden solltet, müsst ihr auch die beigelegte PHP nutzen .

  2. The Following 2 Users Say Thank You to Raumi For This Useful Post:

    Comu (21.04.2012)

  3. #2
    Avatar von Ta1lor
    Registriert seit
    15.11.2011
    Beiträge
    767
    Thanked 833 Times in 435 Posts

    Standard AW: [PHP] Listener

    Hätte man auch mit socket_select ohne thread klasse machen können.

  4. #3
    Avatar von Gnome
    Registriert seit
    14.04.2012
    Beiträge
    75
    Thanked 34 Times in 24 Posts

    Standard AW: [PHP] Listener

    $server = new Server("127.0.0.1", 6565);

    Deswegen geht es nicht. Statt 127.0.0.1 muss die Internet IP vom Server stehen...
    Davon mal abgesehen ist PHP defintiv die schlechteste Lösung für ein 24/7 Server..
    Und davon mal abgesehen gibt es keine Threads in PHP... Auch wenn du es gerne hättest es ist einfach nicht so.. Sleep(1) ist auch ne schlechte alternative, weil er dann 1 Sekunde schläft (anders als in c++). Da wäre eher ein usleep/microsleep angebracht

  5. The Following 2 Users Say Thank You to Gnome For This Useful Post:

    BL4cK (21.04.2012), Raumi (21.04.2012)

  6. #4
    Gelöschter Benutzer
    Gast

    Standard AW: [PHP] Listener

    Für die Leute, die in naher Zukunft einen Chatserver coden wollen, denen kann ich nur nodeJS und socket.IO ans Herz legen!

    Beispiel (Source): https://github.com/sprain/sprain-s-Socket.IO-chat

Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.