Как понять PHP-сокеты, используемые в этом примере - PullRequest
0 голосов
/ 17 октября 2019

Я хотел бы спросить, может ли кто-нибудь объяснить мне код PHP.

Я получил код от своего профессора, потому что он хотел помочь мне с моим программным проектом, но я просто не могупонять даже малейшее из того, что там происходит. Я работал с php пару раз и хотел бы знать, что я делаю половину времени.

Код:

<?php
define('HOST_NAME',"XXX"); /*i do understand these 2 lines but the rest is where its at*/ 
define('PORT',"xxx");
$null = NULL;

require_once("class.chathandler.php");
$chatHandler = new ChatHandler();

$socketResource = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($socketResource, SOL_SOCKET, SO_REUSEADDR, 1);
socket_bind($socketResource, 0, PORT);
socket_listen($socketResource);

$clientSocketArray = array($socketResource);
while (true) {
    $newSocketArray = $clientSocketArray;
    socket_select($newSocketArray, $null, $null, 0, 10);

    if (in_array($socketResource, $newSocketArray)) {
        $newSocket = socket_accept($socketResource);
        $clientSocketArray[] = $newSocket;

        $header = socket_read($newSocket, 1024);
        $chatHandler->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);
        unset($newSocketArray[$newSocketIndex]);
    }

    foreach ($newSocketArray as $newSocketArrayResource) {  
        // Asuming this is .onMessage
        while(socket_recv($newSocketArrayResource, $socketData, 1024, 0) >= 1){
            $socketMessage = $chatHandler->unseal($socketData);

            print "test2: " . $socketData[0];

            $messageObj = json_decode($socketMessage, true);

            $decoded = mb_convert_encoding($socketData, 'utf-8', 'utf-8');



            //print "SocketData"; var_dump($socketData);

            print "SocketMessage";
            var_dump($socketMessage);

            //print "Decoded"; var_dump($decoded);
            print "json: ";
            var_dump($messageObj);
            //print "Decoded 2: "; var_dump($string);
            //print "Strings: "; var_dump($strings);

            $chat_box_message = $chatHandler->createChatBoxMessage($messageObj);
            $chatHandler->send($chat_box_message);
            break 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);
            unset($clientSocketArray[$newSocketIndex]);         
        }
    }
}
socket_close($socketResource);

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...