Swoole是什么?干什么枉氮?
swoole是php腳本語言的一個拓展,但是它不同于一般的php拓展暖庄,主要是實現(xiàn)了php在處理高并發(fā)聊替,異步,高性能程序方面的能力雄驹。是一個網(wǎng)絡通信和異步IO的引擎佃牛,比如,游戲領域医舆,聊天軟件系統(tǒng)俘侠。
swoole幾個部分
swoole_server
swoole_client
swoole_event
swoole_async
swoole_process
swoole_buffer 內(nèi)存區(qū)管理工具
swoole_table 內(nèi)存表,為了解決進程間數(shù)據(jù)共享蔬将,同步加鎖的問題
WebStock初步接觸了解
安裝swoole
GitHub地址 https://github.com/swoole/swoole-src
我選擇的是1.10.4版本的
wget https://github.com/swoole/swoole-src/archive/v1.10.4.tar.gz
tar -zxvf v1.10.4.tar.gz
cd swoole-src-1.10.4/
phpize
./configure
make
make install
可能的問題:
1爷速、 phpize執(zhí)行失敗
執(zhí)行成功應該可以看到
如果報錯 是因為缺少 php-devel
補充執(zhí)行 yum install php-devel
1.5、./configure 失敗 如果你是第一次使用源碼包安裝
沒有gcc是無法編譯執(zhí)行源碼的
yum install gcc
1.9霞怀、 ./config 失敗提示 configure: error: Cannot find php-config. Please use --with-php-config=PATH
一般出現(xiàn)這個錯誤說明你執(zhí)行 ./configure 時 --with-php-config 這個參數(shù)配置路徑錯誤導致的惫东。
修改為:
./configure --with-php-config=/usr/local/php/bin/php-config
就可以解決問題
上面的 /usr/local/php/ 是你的 php 安裝路徑 ,路徑完整填寫是 php-config的路徑
如果不在上面那個路徑通過下面這個命令查找查看安裝路徑的命令:
whereis php // which php :這個是查看正在運行的
2、make執(zhí)行失敗
缺少 pcre-devel 零件
yum install pcre-devel
安裝完畢廉沮,修改配置文件
vim /etc/php.ini
如果此文件中有一句話是這樣
; Note: packaged extension modules are now loaded via the .ini files
; found in the directory /etc/php.d; these are loaded by default.
表示模塊配置文件和php主配置文件分開了颓遏,前往/etc/php.d/文件夾下設置 swoole.ini 文件(不存在就新建)
vim swoole.ini
輸入
extension=swoole.so (開啟swoole拓展)
重啟服務,查看phpinfo內(nèi)容
當然我不會告訴你滞时,其實你直接輸入
pecl install swoole 就可以一步完成安裝的 =叁幢。=(需php7.0以上)
當然配置文件別忘了加上 extension=swoole.so
小測試(使用swoole的搭建一個基于websocket的聊天室)
服務端代碼
(主要功能,接受客戶端發(fā)送的信息坪稽,并返回給客戶端)
<?php
$ws=new swoole_websocket_server('0.0.0.0',9996);
$ws->on('open',function($ws,$request){
var_dump($request->fd,$request->get,$request->server);
echo '鏈接成功'.PHP_EOL;
});
$ws->on('message',function($ws,$frame){
var_dump($frame);
echo "message: {$frame->data} , opcode:{$frame->opcode} \n";
$ws->push($frame->fd,"這是服務器還給你的消息server: {$frame->data}");
});
$ws->on('close',function($ws,$fd){
echo "client-{$fd} is closed\n";
});
$ws->start();
客戶端代碼
(主要效果臨時登錄曼玩,定義name,發(fā)送消息)