php套接字編程,網路編程套接字

本文目錄一覽:

了解PHP-FPM

在伺服器上,當我們查看php進程時,全都是php-fpm進程,大家都知道這個就是php的運行環境,那麼,它到底是個什麼東西呢?

PHP-FPM,就是PHP的FastCGI管理器,用於替換PHP FastCGI的大部分附加功能,在PHP5.3.3後已經成為了PHP的標配。

有小夥伴要問了,FastCGI又是什麼鬼?CGI程序又叫做「通用網關介面」,就是讓Web伺服器和你的應用程序進行交互的一個介面。就像nginx中需要配置的fastcgi_pass,一般我們會使用127.0.0.1:9000或者unix:/tmp/php-cgi.sock來配置這個參數。它的意思就是告訴nginx,過來的請求使用tcp:9000埠的監聽程序來處理或者使用unix/socket來處理。它們都是指向的PHP運行程序。

再說得通俗一點,我們運行php腳本用的是

php-fpm就相當於是這個php命令。nginx通過fastcgi_pass來運行php $nginx_root(nginx配置文件中網站根目錄root配置)下的index.php。所以,如果你用的是python或者其他什麼語言,都可以用它們的cgi程序來讓nginx調用。

FastCGI和CGI又有什麼不同呢?FastCGI是啟動一個socket介面,伺服器應用不需要自己去運行php,只需要向這個socket介面提交請求就可以了。

php-fpm在編譯php時需要添加–enable-fpm。一些通用的集成安裝包如lnmp、phpStudy等都會默認編譯並使用php-fpm,畢竟是標配。

上文中說過nginx可以使用127.0.0.1:9000和unix:/tmp/php-cgi.sock這兩種方式來調用php-fpm。它們有什麼區別呢?

前者,一般帶9000埠號的,是tcp形式的調用。也就是php-fpm啟動了一個監聽進程對9000埠進行監聽。它會調起一個tcp/ip服務,nginx在調用的時候會走一次tcp請求流程,也就是3次握手4次揮手,會走到網路七層中的第四層傳輸層。相對來說這種方式性能會稍差一點,啟動php-fpm後使用nestat查看埠中會出現9000埠的佔用。

後者,使用的是unix套接字socket服務,通過sock文件來交換信息,性能相對好一些,因為它沒有tcp連接過程,也不會有9000埠的佔用。

對於高負載大訪問量的網站還是推薦使用unix方式,對於普通小網站來說,無所謂使用哪個都可以,tcp方式反而更容易配置和理解,也是php-fpm.conf中默認的監聽方式。

php-fpm.conf配置中的listen屬性用來配置監聽,這裡的配置要和nginx中的一致,使用tcp的就監聽127.0.0.1:9000,使用unix的就設置成/tmp/php-cgi-56.sock。

以下內容摘自官方文檔:

===========

各自媒體平台均可搜索【硬核項目經理】

php本地用虛擬機怎麼模擬socket

利用socket發送HTTP請求。

Socket的英文原義是「孔」或「插座」。通常也稱作「套接字」,用於描述IP地址和埠,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟體,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個埠上,不同的埠對應於不同的服務。如此看來,其實利用socket操作遠程文件和讀寫本地的文件一樣容易,把本地文件看成通過硬體傳輸,遠程文件通過網線傳輸就行了。

因而可以將發送請求的考慮成 建立連接-打開socket介面(fsockopen())-寫入請求(fwrite())-讀出響應(fread()-關閉文件(fclose())。話不多說,直接上代碼:

conn($url);

        $this-setHeader(‘Host: ‘ . $this-url[‘host’]);

    }

    // 此方法負責寫請求行

    protected function setLine($method) {

        $this-line[0] = $method . ‘ ‘ . $this-url[‘path’] . ‘?’ .$this-url[‘query’] . ‘ ‘. $this-version;

    }

    // 此方法負責寫頭信息

    public function setHeader($headerline) {

        $this-header[] = $headerline; 

    }

    // 此方法負責寫主體信息

    protected function setBody($body) {

         $this-body[] = http_build_query($body);

    }

    // 連接url

    public function conn($url) {

        $this-url = parse_url($url);

        // 判斷埠

        if(!isset($this-url[‘port’])) {

            $this-url[‘port’] = 80;

        }

        // 判斷query

        if(!isset($this-url[‘query’])) {

            $this-url[‘query’] = ”;

        }

        $this-fh = fsockopen($this-url[‘host’],$this-url[‘port’],$this-errno,$this-errstr,3);

    }

    //構造get請求的數據

    public function get() {

        $this-setLine(‘GET’);

        $this-request();

        return $this-response;

    }

    // 構造post查詢的數據

    public function post($body = array()) {      

        $this-setLine(‘POST’);

        // 設計content-type

        $this-setHeader(‘Content-type: application/x-www-form-urlencoded’);

        // 設計主體信息,比GET不一樣的地方

        $this-setBody($body);

        // 計算content-length

        $this-setHeader(‘Content-length: ‘ . strlen($this-body[0]));

        $this-request();

        return $this-response;

    }

    // 真正請求

    public function request() {

        // 把請求行,頭信息,實體信息 放在一個數組裡,便於拼接

        $req = array_merge($this-line,$this-header,array(”),$this-body,array(”));

        //print_r($req);

        $req = implode(self::CRLF,$req); 

        //echo $req; exit;

        fwrite($this-fh,$req);

        while(!feof($this-fh)) {

            $this-response .= fread($this-fh,1024);

        }

        $this-close(); // 關閉連接

    }

    // 關閉連接

    public function close() {

        fclose($this-fh);

    }

}

編程有哪幾種~

編程有幾種類型?

編程語言的種類繁多,總的來說分為機器語言、彙編語言以及高級語言三大類。

機械語言(machinelanguage):計算機可直接識別、運行的二進位代碼,執行速度快,資源佔用少,但可讀性不強,編程複雜;

彙編語言(assemblylanguage):一種用於電子計算機、微處理器、微控制器或其他可編程器件的低級語言,亦稱為符號語言。目標代碼簡短,佔用內存少,執行速度快,但缺乏可移植性,編程複雜;

高級語言(High-levelprogramminglanguage):相對於機器語言以及彙編語言,高級語言的可讀性強,可移植性高,一般通過事先編好的一個叫做編譯程序的機器語言程序編譯成用機器指令表示的目標程序。現在流行的高級語言有Java、C語言、C++、C#、Pascal、Basic等等。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/195346.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-02 20:34
下一篇 2024-12-02 20:34

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若伺服器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • PHP登錄頁面代碼實現

    本文將從多個方面詳細闡述如何使用PHP編寫一個簡單的登錄頁面。 1. PHP登錄頁面基本架構 在PHP登錄頁面中,需要包含HTML表單,用戶在表單中輸入賬號密碼等信息,提交表單後服…

    編程 2025-04-27
  • PHP與Python的比較

    本文將會對PHP與Python進行比較和對比分析,包括語法特性、優缺點等方面。幫助讀者更好地理解和使用這兩種語言。 一、語法特性 PHP語法特性: <?php // 簡單的P…

    編程 2025-04-27
  • PHP版本管理工具phpenv詳解

    在PHP項目開發過程中,我們可能需要用到不同版本的PHP環境來試驗不同的功能或避免不同版本的兼容性問題。或者我們需要在同一台伺服器上同時運行多個不同版本的PHP語言。但是每次手動安…

    編程 2025-04-24
  • PHP數組去重詳解

    一、array_unique函數 array_unique是php中常用的數組去重函數,它基於值來判斷元素是否重複,具體使用方法如下: $array = array(‘a’, ‘b…

    編程 2025-04-24
  • PHP導出Excel文件

    一、PHP導出Excel文件列寬調整 當我們使用PHP導出Excel文件時,有時需要調整單元格的列寬。可以使用PHPExcel類庫中的setWidth方法來設置單元格的列寬。下面是…

    編程 2025-04-24
  • php擴展庫初探

    一、什麼是php擴展庫? PHP擴展庫(PHP extension)是一些用C語言編寫的動態鏈接庫,用於擴展PHP的功能。PHP擴展庫使得PHP可以與各種資料庫系統相連、SMTP、…

    編程 2025-04-23

發表回復

登錄後才能評論