php socket實現簡單的http服務器

<?php

function onMessage($connection)
{
    //拼裝返回的html內容
    $content = '<html><title>hello,world</title><body>hello,world,http</body></html>';
    //拼裝頭信息
    $header = '';
    $header .= "HTTP/1.1 200 OK\r\n";
    $header .= "Date: ".gmdate('D, d M Y H:i:s T')."\r\n";
    $header .= "Content-Type: text/html;charset=utf-8\r\n";
    $header .= "Content-Length: ".strlen($content)."\r\n\r\n";//必須2個\r\n表示頭部信息結束
    $header .= $content;
    socket_write($connection,$header,strlen($header));

}

function onAccept($socket)
{
    //接收客戶端傳遞過來的信息
    while(true)
    {
        $accept_resource = socket_accept($socket);
        if($accept_resource !== false)
        {
            $string = socket_read($accept_resource,1024);
            echo 'server receive is :'.$string.PHP_EOL;
            if($string != false)
            {
                call_user_func('onMessage',$accept_resource);

            }
        }
    }
}


function run()
{
    //創建服務端的socket套接流,net協議爲IPv4,protocol協議爲TCP
    $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
    /*綁定接收的套接流主機和端口,與客戶端相對應*/
    if(socket_bind($socket,"0.0.0.0", 9502) == false){
        echo 'server bind fail:'.socket_strerror(socket_last_error());exit();
    }
    //監聽套接流
    if(socket_listen($socket,4)==false){
        echo 'server listen fail:'.socket_strerror(socket_last_error());exit();
    }
    //非阻塞
    socket_set_nonblock($socket);
    call_user_func('onAccept',$socket);
}

run();

 瀏覽器訪問:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章