當(dāng)SWOOLE遇上PHP

一直想寫(xiě)點(diǎn)Swoole的東西,畢竟它重新定義了php,卻一直不知道怎么下手寫(xiě)

Swoole涉及的知識(shí)點(diǎn)非常多,互為表里,每次想寫(xiě)都發(fā)現(xiàn)根本理不出一個(gè)頭緒

Swoole是一個(gè)php的擴(kuò)展,它的核心目的就是解決php在實(shí)現(xiàn)server服務(wù)中可能遇到的一系列問(wèn)題,這些問(wèn)題用源生的php往往并不能很高效(執(zhí)行效率)的解決,一般也不會(huì)使用php來(lái)解決,所以會(huì)有說(shuō)swolle重新定義的php的說(shuō)法。

畢竟php作為一門(mén)成熟的腳本語(yǔ)言,開(kāi)發(fā)效率是先天優(yōu)勢(shì)。

擴(kuò)展的英文名稱(chēng)是Extension,php擴(kuò)展是用C語(yǔ)言作為開(kāi)發(fā)語(yǔ)言,基于Zend引擎提供的API,編譯成的一個(gè)動(dòng)態(tài)庫(kù)。

如果曾經(jīng)做過(guò)類(lèi)似動(dòng)態(tài)庫(kù)調(diào)用開(kāi)發(fā)的童鞋可能會(huì)更好理解一些,例如Android中的NDK開(kāi)發(fā)

在php的配置文件中配置好extension的屬性后,就可以引用這個(gè)動(dòng)態(tài)庫(kù)了。

也就是說(shuō),swoole本身是用C語(yǔ)言編寫(xiě)的,它可以讓php獲得一些額外的function。

然后是運(yùn)行方式,swoole的許多功能都只能運(yùn)行在cli模式下,而cli模式往往是很多剛接觸swoole的phper遇到的第一個(gè)問(wèn)題。

我當(dāng)初學(xué)習(xí)swoole的時(shí)候也在cli這里栽了個(gè)大跟頭

我們現(xiàn)在整理一下最常見(jiàn)的php代碼執(zhí)行方式:

  1. 安裝apache、php
  2. 配置apache對(duì)那個(gè)目錄進(jìn)行php解析
  3. 用瀏覽器訪(fǎng)問(wèn)那個(gè)目錄的php文件

更多的細(xì)節(jié)這里就不提了,畢竟我相信每個(gè)phper對(duì)這個(gè)都是很熟悉的。

但這里就開(kāi)始出現(xiàn)了第一個(gè)問(wèn)題,我們知道,php是一個(gè)腳本語(yǔ)言,腳本語(yǔ)言的核心特點(diǎn)在于不用編譯,隨時(shí)執(zhí)行,而執(zhí)行腳本的工具就是解析器,而php的解析器就是zend引擎。

嚴(yán)格來(lái)說(shuō),zend并不是唯一的選擇,不過(guò),zend是最官方的。另外,Zend Studio和Zend Engine不是同一個(gè)東西,本文中的Zend全部指Zend Engine。

換個(gè)角度講,只要有解析器,寫(xiě)好的php腳本就是可以執(zhí)行的,而zend引擎與apache之間并沒(méi)有絕對(duì)的關(guān)系

實(shí)際上,apahce是調(diào)用了zend對(duì)php腳本進(jìn)行執(zhí)行,然后將執(zhí)行結(jié)果輸出給了瀏覽器

所以所謂cli模式(CommandLine,命令行模式),其實(shí)就是在命令行下直接調(diào)用zend引擎對(duì)php腳本進(jìn)行解析并執(zhí)行,并獲得程序輸出結(jié)果的php腳本執(zhí)行方式。

其實(shí)php也可以作為shell腳本來(lái)使用哦,就像bash shell一樣

既然問(wèn)題講清楚了,在一個(gè)系統(tǒng)中具體怎么操作呢?

本文以CentOS 7.5作為系統(tǒng)環(huán)境,swoole是針對(duì)linux系統(tǒng)開(kāi)發(fā)的,windows下并不適用。學(xué)習(xí)swoole的一個(gè)前題是懂得基本的linux系統(tǒng)使用。

當(dāng)安裝好php的時(shí)候,找到php的安裝目錄,如果是默認(rèn)安裝的話(huà),可以試試whereis命令

# 某種簡(jiǎn)單的方法
whereis php
> /usr/local/bin/php;

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

然后我們來(lái)寫(xiě)一個(gè)最經(jīng)典的php腳本:

//vi hello_cli.php
<?php
    echo 'Hello PHP Cli';

編寫(xiě)純php腳本時(shí),php標(biāo)簽不要封口

然后我們?cè)趕hell里執(zhí)行它:

/usr/local/bin/php hello_cli.php
> Hello PHP Cli

這段代碼中的第一個(gè)php,是一個(gè)可執(zhí)行文件,它接受一個(gè)php腳本文件作為輸入?yún)?shù),并解析執(zhí)行這個(gè)php腳本文件(通過(guò)zend)。

沒(méi)有錯(cuò),第一個(gè)cli模式下的php程序就被你執(zhí)行成功了!

默認(rèn)情況下,php都會(huì)被安裝在了$PATH的目錄下,那就可以直接省略路徑前綴了,下文中調(diào)用php的時(shí)候,全都省略了路徑前綴。

因?yàn)閟woole是pecl的項(xiàng)目,所以使用pecl安裝是最簡(jiǎn)單的方法,強(qiáng)烈推薦第一次接觸的童鞋先使用pecl安裝,在熟悉了swoole之后,再考慮使用編譯安裝的方式以獲取更多進(jìn)階功能。

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

pecl install swoole

執(zhí)行以下命令查看是否安裝成功:

php -m | grep swoole
> swoole

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

另一個(gè)常見(jiàn)的比較麻煩的問(wèn)題是,有些童鞋的電腦里安裝了多個(gè)php,而安裝的時(shí)候沒(méi)有正確的安裝到預(yù)期的php的擴(kuò)展目錄中,就會(huì)導(dǎo)致無(wú)法正常工作,解決方案就是弄清楚各個(gè)php安裝目錄及配置關(guān)系,選擇正確的目錄進(jìn)行安裝。

其實(shí)本文還沒(méi)正式開(kāi)始介紹swoole,都是在學(xué)習(xí)swoole之前的準(zhǔn)備工作,swoole的上手門(mén)檻比一般的php應(yīng)用要高的多,如果沒(méi)有網(wǎng)絡(luò)開(kāi)發(fā)和操作系統(tǒng)方面的一些知識(shí),學(xué)習(xí)它并不是一件容易的事情,學(xué)習(xí)曲線(xiàn)很陡峭。

這句話(huà)我在群里說(shuō)了無(wú)數(shù)次


很多新手會(huì)詬病swoole的手冊(cè)寫(xiě)的太模糊,其實(shí)是前置知識(shí)不足,而手冊(cè)也給出了需要的前置知識(shí)列表,以下引用至官網(wǎng)的手冊(cè)-學(xué)習(xí)swoole需要哪些知識(shí)?

多進(jìn)程/多線(xiàn)程

  • 了解Linux操作系統(tǒng)進(jìn)程和線(xiàn)程的概念
  • 了解Linux進(jìn)程/線(xiàn)程切換調(diào)度的基本知識(shí)
  • 了解進(jìn)程間通信的基本知識(shí),如管道、UnixSocket、消息隊(duì)列、共享內(nèi)存

socket

  • 了解SOCKET的基本操作如accept/connect、send/recv、close、listen、bind
  • 了解SOCKET的接收緩存區(qū)、發(fā)送緩存區(qū)、阻塞/非阻塞、超時(shí)等概念

IO復(fù)用

  • 了解select/poll/epoll
  • 了解基于select/epoll實(shí)現(xiàn)的事件循環(huán),Reactor模型
  • 了解可讀事件、可寫(xiě)事件

TCP/IP網(wǎng)絡(luò)協(xié)議

  • 了解TCP/IP協(xié)議
  • 了解TCP、UDP傳輸協(xié)議

調(diào)試工具

  • 使用gdb調(diào)試Linux程序
  • 使用strace跟蹤進(jìn)程的系統(tǒng)調(diào)用
  • 使用tcpdump跟蹤網(wǎng)絡(luò)通信過(guò)程
  • 其他Linux系統(tǒng)工具,如ps、lsof、top、vmstat、netstat、sar、ss等

學(xué)習(xí)并理解一個(gè)新事務(wù)并不是一個(gè)容易的事情,特別對(duì)于swoole這種具備一定顛覆性的工具,要有耐心和實(shí)踐。

淡定的把手冊(cè)看完,遇到不理解的名字學(xué)會(huì)使用搜索引擎學(xué)習(xí),swoole的手冊(cè)其實(shí)是個(gè)大寶庫(kù),網(wǎng)絡(luò)開(kāi)發(fā)常見(jiàn)的問(wèn)題其實(shí)里邊都涉及到了。

來(lái)源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 上一回講到,Swoole終于成功邂逅了PHP,現(xiàn)在要開(kāi)始它們的奇妙路程了。 Server之初 通常,我們會(huì)把...
    零一間閱讀 2,972評(píng)論 0 12
  • 轉(zhuǎn)自陳明乾的博客,可能有一定更新。 轉(zhuǎn)原文聲明:原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章 原始出處 、...
    C86guli閱讀 4,883評(píng)論 6 72
  • Composer Repositories Composer源 Firegento - Magento模塊Comp...
    零一間閱讀 4,021評(píng)論 1 66
  • 更改ip和dnsVi /etc/sysconfig/network-scripts/ifcfg-eth0vi /...
    Xwei_閱讀 2,044評(píng)論 0 3
  • 1、當(dāng)我們還是小孩子的時(shí)候,我們最高興的是,每天放學(xué)可以放肆的玩耍。如果當(dāng)時(shí)知道以后那些小伙伴很難再相聚,會(huì)不會(huì)更...
    絳色夜未央閱讀 484評(píng)論 2 0

友情鏈接更多精彩內(nèi)容