一直想寫點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版本一定要注意這...