Membuat Aplikasi Obrolan PHP Dengan WebSocket

0
81

Membuat Aplikasi Obrolan PHP Dengan WebSocket – Pada artikel ini kita akan belajar Membuat Aplikasi Obrolan PHP Dengan WebSocket.

Untuk Belajar PHP Anda bisa lihat di artikel sebelumnya di sini

Belajar PHP

Konfigurasi

Buka berkas php.ini di DocumentRoot di c: xampp htdocs php.

Kemudian aktifkan extension = php_sockets.dll menjadi seperti ini:

; extension = php_sockets.dll
extension = php_sockets.dll

Menyimpan file php.ini lalu mengulang kembali XAMPP.

Membuat Aplikasi Obrolan PHP Dengan WebSocket

Buat folder baru dengan nama php-chat-websocket di DocumentRoot di c: xampp htdocs.

Dari command prompt ketik ini perintah berikut:

cd c:  xampp  htdocs
mkdir php-chat-websocket

php-socket.php

Buat file baru dengan nama php-socket.php dalam direktori php-chat-websocket dan ketik ini skrip berikut:

doHandshake ($ header, $ newSocket, HOST_NAME, PORT);

        socket_getpeername ($ newSocket, $ client_ip_address);
        $ connectionACK = $ chatHandler-> newConnectionACK ($ client_ip_address);

        $ chatHandler-> send ($ connectionACK);

        $ newSocketIndex = array_search ($ socketResource, $ newSocketArray);
        tidak disetel ($ newSocketArray[$newSocketIndex]);
    }

    foreach ($ newSocketArray sebagai $ newSocketArrayResource) {
        while (socket_recv ($ newSocketArrayResource, $ socketData, 1024, 0)> = 1) {
            $ socketMessage = $ chatHandler-> unseal ($ socketData);
            $ messageObj = json_decode ($ socketMessage);

            $ chat_box_message = $ chatHandler-> createChatBoxMessage ($ messageObj-> chat_user, $ messageObj-> chat_message);
            $ chatHandler-> send ($ chat_box_message);
            istirahat 2;
        }

        $ socketData = @socket_read ($ newSocketArrayResource, 1024, PHP_NORMAL_READ);
        if ($ socketData === false) {
            socket_getpeername ($ newSocketArrayResource, $ client_ip_address);
            $ connectionACK = $ chatHandler-> connectionDisconnectACK ($ client_ip_address);
            $ chatHandler-> send ($ connectionACK);
            $ newSocketIndex = array_search ($ newSocketArrayResource, $ clientSocketArray);
            tidak disetel ($ clientSocketArray[$newSocketIndex]);
        }
    }
}
socket_close ($ socketResource);
?>

class.chathandler.php

Buat file baru dengan nama class.chathandler.php dalam direktori php-chat-websocket dan ketik ini skrip berikut:

<? php

Kelas ChatHandler {
    fungsi kirim ($ pesan) {
        global $ clientSocketArray;
        $ messageLength = strlen ($ message);
        foreach ($ clientSocketArray sebagai $ clientSocket) {
            @socket_write ($ clientSocket, $ message, $ messageLength);
        }
        kembali benar;
    }

    function unseal ($ socketData) {
        $ length = ord ($ socketData[1]) & 127;
        if ($ length == 126) {
            $ mask = substr ($ socketData, 4, 4);
            $ data = substr ($ socketData, 8);
        }
        elseif ($ length == 127) {
            $ mask = substr ($ socketData, 10, 4);
            $ data = substr ($ socketData, 14);
        } lain {
            $ mask = substr ($ socketData, 2, 4);
            $ data = substr ($ socketData, 6);
        }
        $ socketData = "";
        untuk ($ i = 0; $ i <strlen ($ data); ++ $ i) {
            $ socketData. = $ data[$i] ^ $ topeng[$i%4];
        }
        mengembalikan $ socketData;
    }

    segel fungsi ($ socketData) {
        $ b1 = 0x80 | (0x1 & 0x0f);
        $ length = strlen ($ socketData);

        if ($ length <= 125)
            $header = pack('CC', $b1, $length);
        elseif($length > 125 && $ panjang < 65536)
            $header = pack('CCn', $b1, 126, $length);
        elseif($length >= 65536)
            $ header = paket (& # 39; CCNN & # 39 ;, $ b1, 127, $ panjang);
        kembalikan $ header. $ socketData;
    }

    Fungsi doHandshake ($ diterima_header, $ client_socket_resource, $ host_name, $ port) {
        $ header = array ();
        $ lines = preg_split ("/  r  n /", $ diterima_header);
        foreach ($ lines as $ line) {
            $ line = chop ($ line);
            if (preg_match (& # 39; /  A ( S +): (. *)  z / & # 39 ;, $ line, $ cocok)) {
                $ header[$cocok[$cocok[$matches[$matches[1]]= $ cocok[2];
            }
        }

        $ secKey = $ header['Sec-WebSocket-Key'];
        $ secAccept = base64_encode (paket (& # 39; H * & # 39 ;, sha1 ($ secKey. & # 39; 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 & # 39;))));
        $ buffer = "HTTP / 1.1 101 Jabat Tangan Protokol Socket Web  r  n".
        "Tingkatkan: websocket  r  n".
        "Koneksi: Tingkatkan  r  n".
        "WebSocket-Origin: $ host_name  r  n".
        "Lokasi WebSocket: ws: // $ host_name: $ port / demo / shout.php  r  n".
        "Sec-WebSocket-Accept: $ secAccept  r  n  r  n";
        socket_write ($ client_socket_resource, $ buffer, strlen ($ buffer));
    }

    function newConnectionACK ($ client_ip_address) {
        $ message = & # 39; Klien baru & # 39 ;. $ client_ip_address. & # 39; bergabung dengan & # 39 ;;
        $ messageArray = array (& # 39; message & # 39; => $ message, & # 39; message_type & # 39; => & # 39; chat-connection-ack & # 39;);
        $ ACK = $ this-> seal (json_encode ($ messageArray));
        mengembalikan $ ACK;
    }

    function connectionDisconnectACK ($ client_ip_address) {
        $ message = & # 39; Klien & # 39 ;. $ client_ip_address. & # 39; terputus & # 39 ;;
        $ messageArray = array (& # 39; message & # 39; => $ message, & # 39; message_type & # 39; => & # 39; chat-connection-ack & # 39;);
        $ ACK = $ this-> seal (json_encode ($ messageArray));
        mengembalikan $ ACK;
    }

    function createChatBoxMessage ($ chat_user, $ chat_box_message) {
        $ message = $ chat_user. ": 
". $ chat_box_message."
"; $ messageArray = array (& # 39; message & # 39; => $ message, & # 39; message_type & # 39; => & # 39; chat-box-html & # 39;); $ chatMessage = $ this-> seal (json_encode ($ messageArray)); kembalikan $ chatMessage; } } ?>

index.php

Buat file baru dengan nama index.php dalam direktori php-chat-websocket dan ketik ini skrip berikut:



    	
    
    


    

Menguji Aplikasi Obrolan PHP Dengan WebSocket

Dari command prompt ketik ini perintah berikut:

cd c:  xampp  htdocs  php-chat-websocket
php -q php-socket.php

Kemudian buka 2 buah browser Ketik masing-masing di URL http: // localhost / php-chat-websocket /

Selanjutnya coba ngobrol di kedua browser.

Inilah cara untuk membuatnya Membuat Aplikasi Obrolan PHP Dengan WebSocket sudah selesai. Pada artikel selanjutnya kita akan mempraktikkan lebih banyak contoh program menggunakan PHP.

Semoga bermanfaat.

Anda dapat mengunduh kode sumber di sini:

LEAVE A REPLY

Please enter your comment!
Please enter your name here