swoole深刻學習 1. swoole初始

0. 前言

swoole在PHP圈火了這麼久,從2年前我用node寫socket聊天服務器的時候就火了,那時候,常常有相似的文章php+swoole完爆nodejs之類的文章來吸引眼球,先不說它的好與壞,單單說他的出現,確實給php注入了一股新的活力。php

首先,php是單進程的,無法在一個程序塊中使用多進程來處理一個複雜的邏輯,即便後來出現了pcntl_fork模塊來處理多進程,可是它比較雞肋,並不適用於windows平臺,其實最大的問題是它使用起來很是之複雜和繁瑣,難以理解。node

其次,php並不支持異步,這一點偏偏是nodejs平臺所擅長的。因此,在處理一些高併發高負載的請求的時候,咱們每每會考慮用nodejs來作。mysql

再者,php並不適合作TCP,socket之類的長鏈接,第一是性能問題,第二,我我的以爲仍是複雜和繁瑣,使用起來會很是吃力,特別是對socket, TCP/UDP, 網絡IO等底層的東西並非很熟悉(好比如今的我)的時候,用起來更是吃力。nginx

那麼,有沒有一種辦法,可以讓php很好的支持異步、異步、簡單的使用tcp/udp/socket服務呢。噹噹噹。swoole應運而生了!!!c++

1. swoole 簡介

官網是:http://www.swoole.com/ ,是大神韓天峯(Rango)的做品,我有幸在B站的一次技術會議上,見到了大神,很平易近人的一個大叔。git

swoole發音爲 死沃爾 , 並非死喔了, 官網給它的介紹是:github

swoole是PHP的異步、並行、高性能網絡通訊引擎,使用純C語言編寫,提供了PHP語言的異步多線程服務器,異步TCP/UDP網絡客戶端,異步MySQL,異步Redis數據庫鏈接池,AsyncTask,消息隊列,毫秒定時器,異步文件讀寫,異步DNS查詢。 Swoole內置了Http/WebSocket服務器端/客戶端、Http2.0服務器端。web

先不說這些玩意兒怎麼用,但看這些描述,簡直就是吊炸天啊,沒swoole以前,基本是在用其餘的語言諸如c++ ,Go等靜態語言來寫這些服務了,而如今,phper們,大家徹底能夠用swoole協助用PHP語言寫這些牛逼的玩意了。redis

2. swoole運行機制

在進行系統的學習swoole以前,先來講下swoole的原理和機制,我以爲知道了會對它有一個大體的瞭解。sql

Swoole雖然是標準的PHP擴展,實際上與普通的擴展不一樣。普通的擴展只是提供一個庫函數。而swoole擴展在運行後會接管PHP的控制權,進入事件循環。當IO事件發生後,swoole會自動回調指定的PHP函數。

也就是說,swoole就是個披了php外衣的nginx,大量的功能都是用c來實現。一些功能的調用其實並沒php什麼事,它只是個純粹的膠水,有什麼功能全用c在實現,而後執行完成再回調給php。

因此,你至關於在用php語法來寫底層的c服務,你並不須要瞭解底層的實現邏輯,你會用php就足夠了,因缺思婷~

3. swoole提供的功能庫。

在說下swoole提供了哪些功能給咱們用,覺得咱們用到哪些服務時,能夠用swoole來幫咱們實現。

  • [X] http服務 ,編寫一個簡單的web server。
  • [X] TCP/UDP服務 ,編寫一個消息接受處理系統。
  • [X] 異步,能夠異步的處理請求。
  • [X] 併發 ,能夠併發的處理同一個業務邏輯。
  • [X] socket,socket通信處理技術。
  • [X] 毫秒級別定時器,能夠在php中使用定時器了。
  • [X] 協程,相比線程更穩定和好用。

若是你的業務中,有用到以上等特性,你又在用使用php,那麼徹底能夠用swoole來完成了。

4. swoole安裝

swoole的安裝相對來講很簡單,你徹底能夠把他當作一個普通的php的擴展來安裝。

簡單記錄下:

pecl安裝:

pecl install swoole

源碼安裝:

git clone https://github.com/swoole/swoole-src.git cd swoole-src phpize ./configure make && make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

Mac下brew安裝:

brew install php56-swoole
brew install php70-swoole

我在學習時候,按照的是目前的最新文檔版本: 1.8.11-stable

安裝好以後呢。若是你還須要對你想對你的編輯器,好比:phpstrom 對swoole的代碼提示功能,就能夠下載幫助文件:https://github.com/eaglewu/swoole-ide-helper

下載這個完成以後呢,當你打開一個項目,在External Libraries上就能夠打開一個框,而後把下載的提示文件,加進來:

此處輸入圖片的描述

若是,代碼提示沒生效,能夠選中 Src裏的全部文件,右建,Mark as Plain Text,就能夠了。 
此處輸入圖片的描述

OK,一個簡單的介紹和安裝就到這裏了,下面會着重介紹如何使用swoole。

update 2016.11.29

做者更新了新的 ide-helper文件,更加智能好用,能夠根據swoole擴展本身去生成ide-helper文檔:

Git 下載這個:https://github.com/swoole/ide-helper

而後 cd ide-helper &&& sudo php dump.php 會生成 output文件夾,這就是ide幫助文件,按照上面的方式加到ide的擴展包裏,寫代碼就能識別了。並且是最新的代碼特性。

相關文章
相關標籤/搜索