瞅瞅 PHP+Swoole 做爲網絡通訊框架

這裏瞅瞅Swoole框架,由於說的比較屌,官網裏面文檔比較多https://www.swoole.com/php

代碼地址(https://gitee.com/swoole/swoole)html

這裏先複製他的說明(https://wiki.swoole.com/)mysql

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

Swoole底層內置了異步非阻塞、多線程的網絡IO服務器。PHP程序員僅需處理事件回調便可,無需關心底層。與Nginx/Tornado/Node.js等全異步的框架不一樣,Swoole既支持全異步,也支持同步。程序員

除了異步IO的支持以外,Swoole爲PHP多進程的模式設計了多個併發數據結構和IPC通訊機制,能夠大大簡化多進程併發編程的工做。其中包括了併發原子計數器併發HashTableChannelLock進程間通訊IPC等豐富的功能特性。github

Swoole從2.0版本開始支持了內置協程,可使用徹底同步的代碼實現異步程序。PHP代碼無需額外增長任何關鍵詞,底層自動進行協程調度,實現異步。redis

在已經安裝的php環境下面須要安裝一下 Swoole 擴展,在文檔中說明了各類系統的,我這裏記錄一下本身這邊的操做,mac下用的brew 包管理:sql

而後看看個人 php 版本,選擇安裝不一樣的拓展,這邊安裝 brew install homebrew/php/php71-swoole,但我這裏已經安裝好了,若是失敗,也經過源碼安裝brew reinstall php71-swoole --build-from-source數據庫

而後須要php.ini 中添加 extension = swoole.so,使用 php -m 看拓展有沒有生效,若是沒生效能夠試試重啓 apache 服務器。apache

下面寫個demo 試試:

$serv = new swoole_server("127.0.0.1", 9501);
$serv->on('connect', function ($serv, $fd){
    echo "Client:Connect.\n";
});
$serv->on('receive', function ($serv, $fd, $from_id, $data) {
    $serv->send($fd, 'Swoole: '.$data);
    $serv->close($fd);
});
$serv->on('close', function ($serv, $fd) {
    echo "Client: Close.\n";
});
$serv->start();

客戶端:

$client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$client->on("connect", function($cli) {
    $cli->send("hello world\n");
});
$client->on("receive", function($cli, $data = ""){
    echo "Receive: ".$data.PHP_EOL;
});
$client->on("error", function($cli){
    echo "connect fail\n";
});
$client->on("close", function($cli){
    echo "connection close\n";
});
$client->connect('127.0.0.1', 9501, 0.5);

而後須要在php-cli環境下執行:

文檔裏面有一張圖,能夠幫助咱們理解

 

參考:

https://www.gitbook.com/book/linkeddestiny/easy-swoole/details

https://wiki.swoole.com/wiki/page/1.html

未完待續!!!!

 

 

有什麼討論的內容,能夠加我微信公衆號:

相關文章
相關標籤/搜索