成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

自己動(dòng)手用PHP編寫(xiě)一個(gè)簡(jiǎn)單的HTTP Server(單進(jìn)程版)

khlbat / 3449人閱讀

摘要:自己動(dòng)手用編寫(xiě)一個(gè)簡(jiǎn)單的單進(jìn)程版協(xié)議我的簡(jiǎn)化版理解就是電腦上瀏覽器向服務(wù)器發(fā)送一個(gè)預(yù)先定義好的文本然后服務(wù)器端處理一下通常是從硬盤(pán)讀取一個(gè)后綴名為的文件,然后再把這個(gè)文件通過(guò)文本方式發(fā)回去就這么簡(jiǎn)單。

自己動(dòng)手用PHP編寫(xiě)一個(gè)簡(jiǎn)單的HTTP Server(單進(jìn)程版)

HTTP協(xié)議我的簡(jiǎn)化版理解就是電腦上瀏覽器向服務(wù)器發(fā)送一個(gè)預(yù)先定義好的文本(Http Request)
然后服務(wù)器端處理一下(通常是從硬盤(pán)讀取一個(gè)后綴名為html的文件),然后再把這個(gè)文件
通過(guò)文本方式發(fā)回去(Http Response),就這么簡(jiǎn)單。

唯一麻煩的是我得請(qǐng)操作系統(tǒng)給我建立Http層下面的TCP連接通道,因?yàn)樗械奈谋緮?shù)據(jù)都得
通過(guò)TCP管道接收和發(fā)送,這個(gè)通道是用socket建立的。

偽代碼如下

socketMain= socket(...)
bind(socketMain,主機(jī)的IP和端口號(hào))
listen(socketMain,...)

無(wú)限循環(huán)
while(true) {
    socketAccept = accept(socketMain,....)
    receive(socketAccept,....)
    send(socketAccept...)
    close(socketAccept...)

}

偽代碼解釋

這些socket,bind,listen,accept都是操作系統(tǒng)提供的接口,我們要做的就是把這些進(jìn)行
組裝;現(xiàn)在80或者其他端口監(jiān)聽(tīng),然后進(jìn)入無(wú)限循環(huán),如果有請(qǐng)求進(jìn)來(lái),就接受(accept),創(chuàng)建新的socket,最后通過(guò)這個(gè)socket來(lái)接收和發(fā)送Http數(shù)據(jù)。

實(shí)現(xiàn)的php代碼如下

只實(shí)現(xiàn)了當(dāng)前目錄下的html與jpg圖片的解析處理,原理都類(lèi)似。


_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
        if ($this->_socket === false) {
            die(socket_strerror(socket_last_error($this->_socket)));
        }
    }

    public function run()
    {
        socket_bind($this->_socket, $this->ip, $this->port);
        socket_listen($this->_socket, 5);
        while(true) {
            $socketAccept = socket_accept($this->_socket);
            $request = socket_read($socketAccept, 1024);
            echo $request;
            socket_write($socketAccept, "HTTP/1.1 200 OK".PHP_EOL);
            socket_write($socketAccept, "Date:".date("Y-m-d H:i:s").PHP_EOL);

            $fileName = $this->getUri($request);
            $fileExt = preg_replace("/^.*.(w+)$/", "$1", $fileName);
            $fileName = __DIR__."/".$fileName;
            switch ($fileExt) {
                case "html":
                    //set content type
                    socket_write($socketAccept, "Content-Type: text/html".PHP_EOL);
                    socket_write($socketAccept, "".PHP_EOL);
                    $fileContent = file_get_contents($fileName);
                    socket_write($socketAccept, $fileContent, strlen($fileContent));
                    break;
                case "jpg":
                    socket_write($socketAccept, "Content-Type: image/jpeg".PHP_EOL);
                    socket_write($socketAccept,"".PHP_EOL);
                    $fileContent = file_get_contents($fileName);
                    socket_write($socketAccept, $fileContent, strlen($fileContent));
                    break;
            }
            socket_write($socketAccept, "web serving", strlen("web serving"));
            socket_close($socketAccept);

        }

    }

    protected function getUri($request = "")
    {
        $arrayRequest = explode(PHP_EOL, $request);
        $line = $arrayRequest[0];
        $file = trim(preg_replace("/(w+)s/(.*)sHTTP/1.1/i","$2", $line));
        return $file;
    }


    public function close()
    {
        socket_close($this->_socket);
    }





}
$httpServer = new HttpServer();
$httpServer->run();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/22232.html

相關(guān)文章

  • 一步步搭建物聯(lián)網(wǎng)系統(tǒng)——GNU/Linux 強(qiáng)大且Free

    摘要:強(qiáng)大且什么是是一種自由和開(kāi)放源碼的類(lèi)操作系統(tǒng)內(nèi)核。是一個(gè)領(lǐng)先的操作系統(tǒng)內(nèi)核,世界上運(yùn)算最快的臺(tái)超級(jí)電腦運(yùn)行的都是基于內(nèi)核的操作系統(tǒng)。開(kāi)機(jī)完成后,就接手初始化硬件設(shè)備創(chuàng)建存儲(chǔ)器空間的映射,以便為操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的軟硬件環(huán)境。 GNU/Linux 強(qiáng)大且Free showImg(http://designiot.phodal.com/images/gnu_linux.png); ...

    weapon 評(píng)論0 收藏0
  • 一步步搭建物聯(lián)網(wǎng)系統(tǒng)——GNU/Linux 強(qiáng)大且Free

    摘要:強(qiáng)大且什么是是一種自由和開(kāi)放源碼的類(lèi)操作系統(tǒng)內(nèi)核。是一個(gè)領(lǐng)先的操作系統(tǒng)內(nèi)核,世界上運(yùn)算最快的臺(tái)超級(jí)電腦運(yùn)行的都是基于內(nèi)核的操作系統(tǒng)。開(kāi)機(jī)完成后,就接手初始化硬件設(shè)備創(chuàng)建存儲(chǔ)器空間的映射,以便為操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的軟硬件環(huán)境。 GNU/Linux 強(qiáng)大且Free showImg(http://designiot.phodal.com/images/gnu_linux.png); ...

    yanwei 評(píng)論0 收藏0
  • 對(duì)PHP-FPM和CGI,還有并發(fā)響應(yīng)理解

    摘要:官方對(duì)的解釋是進(jìn)程管理器。對(duì)并發(fā)訪問(wèn)的處理進(jìn)程和線程從代碼級(jí)別來(lái)講不支持多線程操作,不能像等語(yǔ)言一樣可以編寫(xiě)多線程代碼。 關(guān)于本篇文章的部分糾正,請(qǐng)參考這篇文章:http://www.cppblog.com/woaido... 首先搞清楚php-fpm與cgi的關(guān)系 CGI CGI是一個(gè)web server與cgi程序(這里可以理解為是php解釋器)之間進(jìn)行數(shù)據(jù)傳輸?shù)膮f(xié)議,保證了傳遞的...

    tianyu 評(píng)論0 收藏0
  • zys高性能服務(wù)框架

    摘要:是基于和的高性能服務(wù)框架核心特性基于提供分布式服務(wù)器通訊服務(wù)基于提供遠(yuǎn)程調(diào)用服務(wù)基于提供在線網(wǎng)絡(luò)直播平臺(tái)服務(wù)基于提供同步異步數(shù)據(jù)庫(kù)連接池服務(wù)基于提供異步任務(wù)服務(wù)器投遞任務(wù)服務(wù)基于提供服務(wù)器硬件實(shí)時(shí)監(jiān)控服務(wù)基于提供共享數(shù)據(jù)配置服務(wù)基于提供高并 zys是基于yaf和swoole的高性能服務(wù)框架核心特性 1.基于swoole提供分布式服務(wù)器通訊服務(wù) 2.基于thrift提供rpc遠(yuǎn)程調(diào)用服務(wù)...

    oujie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<