Swoole 遇上 PHP會是怎樣的結果呢

2022-06-11 13:18:08 字數 2845 閱讀 6789

一直想寫點swoole的東西,畢竟它重新定義了php,卻一直不知道怎麼下手寫

swoole涉及的知識點非常多,互為表裡,每次想寫都發現根本理不出乙個頭緒

swoole是乙個php的擴充套件,它的核心目的就是解決php在實現server服務中可能遇到的一系列問題,這些問題用源生的php往往並不能很高效(執行效率)的解決,一般也不會使用php來解決,所以會有說swolle重新定義的php的說法。

其實swoole也提供了乙個框架,swoole framework是基於swoole extension設計的乙個框架,要用好這個框架,還是要先了解swoole extension。

擴充套件的英文名稱是extension,php擴充套件是用c語言作為開發語言,基於zend引擎提供的api,編譯成的乙個動態庫。

如果曾經做過類似動態庫呼叫開發的童鞋可能會更好理解一些,例如android中的ndk開發

在php的配置檔案中配置好extension的屬性後,就可以引用這個動態庫了。

也就是說,swoole本身是用c語言編寫的,它可以讓php獲得一些額外的function。

然後是執行方式,swoole的許多功能都只能執行在cli模式下,而cli模式往往是很多剛接觸swoole的phper遇到的第乙個問題。

有時候其實只是需要轉變一下思路

安裝apache、php

配置apache對那個目錄進行php解析

用瀏覽器訪問那個目錄的php檔案

更多的細節這裡就不提了,畢竟我相信每個phper對這個都是很熟悉的。

但這裡就開始出現了第乙個問題,我們知道,php是乙個指令碼語言,指令碼語言的核心特點在於不用編譯,隨時執行,而執行指令碼的工具就是解析器,而php的解析器就是zend引擎。

嚴格來說,zend並不是唯一的選擇,不過,zend是最官方的。另外,zend studio和zend engine不是同乙個東西,本文中的zend全部指zend engine。

換個角度講,只要有解析器,寫好的php指令碼就是可以執行的,而zend引擎與apache之間並沒有絕對的關係

實際上,apahce是呼叫了zend對php指令碼進行執行,然後將執行結果輸出給了瀏覽器

所以所謂cli模式(commandline,命令列模式),其實就是在命令列下直接呼叫zend引擎對php指令碼進行解析並執行,並獲得程式輸出結果的php指令碼執行方式。

其實php也可以作為shell指令碼來使用哦,就像bash shell一樣

既然問題講清楚了,在乙個系統中具體怎麼操作呢?

本文以centos 7.5作為系統環境,swoole是針對linux系統開發的,windows下並不適用。學習swoole的乙個前題是懂得基本的linux系統使用。

當安裝好php的時候,找到php的安裝目錄,如果是預設安裝的話,可以試試whereis命令

# 某種簡單的方法 whereis php > /usr/local/bin/php;

locate whereis find這些命令都可以試試,目的是找到php

然後我們來寫乙個最經典的php指令碼:

<?php //vi hello_cli.php echo'hello php cli';

編寫純php指令碼時,php標籤不要封口

然後我們在shell裡執行它:

/usr/local/bin/php hello_cli.php > hello php cli

這段**中的第乙個php,是乙個可執行檔案,它接受乙個php指令碼檔案作為輸入引數,並解析執行這個php指令碼檔案(通過zend)。

沒有錯,第乙個cli模式下的php程式就被你執行成功了!

預設情況下,php都會被安裝在了$path的目錄下,那就可以直接省略路徑字首了,下文中呼叫php的時候,全都省略了路徑字首。

pecl這個工具基本都會被安裝在與php相同的目錄下(往往也都是$path目錄)

pecl install swoole

執行以下命令檢視是否安裝成功:

php -m | grep swoole > swoole

如果正確的輸出了swoole,那麼恭喜你,這次安裝很成功

另乙個常見的比較麻煩的問題是,有些童鞋的電腦裡安裝了多個php,而安裝的時候沒有正確的安裝到預期的php的擴充套件目錄中,就會導致無法正常工作,解決方案就是弄清楚各個php安裝目錄及配置關係,選擇正確的目錄進行安裝。

其實本文還沒正式開始介紹swoole,都是在學習swoole之前的準備工作,swoole的上手門檻比一般的php應用要高的多,如果沒有網路開發和作業系統方面的一些知識,學習它並不是一件容易的事情,學習曲線很陡峭。

這句話我在群裡說了無數次

很多新手會詬病swoole的手冊寫的太模糊,其實是前置知識不足,而手冊也給出了需要的前置知識列表,以下引用至官網的手冊-學習swoole需要哪些知識?

多程序/多執行緒

了解linux作業系統程序和執行緒的概念

了解linux程序/執行緒切換排程的基本知識

了解程序間通訊的基本知識,如管道、unixsocket、訊息佇列、共享記憶體

socket

了解socket的基本操作如accept/connect、send/recv、close、listen、bind

了解socket的接收快取區、傳送快取區、阻塞/非阻塞、超時等概念

io復用

了解select/poll/epoll

了解基於select/epoll實現的事件迴圈,reactor模型

了解可讀事件、可寫事件

tcp/ip網路協議

了解tcp/ip協議

了解tcp、udp傳輸協議

除錯工具

使用gdb除錯linux程式

使用strace跟蹤程序的系統呼叫

使用tcpdump跟蹤網路通訊過程

其他linux系統工具,如ps、lsof、top、vmstat、netstat、sar、ss等

開發未來會是怎樣的呢

建議如果有同等級網際網路offer還是去網際網路公司,遊戲行業目前程式設計師地位較低。1.網易遊戲雖然給的應屆生非清北28w,清北32w起。但是進網易遊戲前幾年你的加薪機會為0 後幾年也可能是0,除非你能評級或者你的專案很火很火,不過貌似網易遊戲評級較難 而且工作時間遠遠大於大部分網際網路公司。晚上...

php 安裝swoole擴充套件

2 解壓unzip swoole src master.zip 3 編譯發現沒有configure 使用phpize 生成 configure 進入到swoole 解壓後的目錄 cd usr local src swoole src master 執行phpize usr local php7 bi...

php安裝swoole擴充套件

pecl download swoole解壓並進入目錄 tar zxvf swoole 4.3.3.tar.gz cd swoole 4.3.3執行phpize生成configure可執行檔案 這裡的目錄一定是你要安裝swoole擴充套件對應的php版本的安裝目錄,如果存在多個php版本一定要注意這...