workman

workman安裝:

環境安裝:javascript

檢測依賴環境是否安裝 rpm -qa | grep 「軟件或者包的名字」或者 yum list installedphp

eg:
rpm -qa | grep libevent-devel

必須擴展:pcntl(pcntl擴展能夠支持php的多線程操做(僅限linux系統))、posix html

可選擴展:event(php7)或者 libevent(php5) 選其中一個  且這兩個擴展依賴libevent-devel擴展java

一鍵環境全裝:mysql

#此步驟包含了安裝php-cli主程序以及pcntl、posix、libevent庫及git程序
yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y

單獨安裝:linux

檢測:擴展是否安裝:curl -Ss http://www.workerman.net/check.php | phpnginx

#省略安裝 pcntl、posix 的步驟
#安裝event擴展的依賴庫
yum install libevent-devel -y   
#下載並安裝event擴展
wget http://pecl.php.net/get/event-2.5.3.tgz
tar -zxvf event-2.5.3.tgz 
cd event-2.5.3
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
#全路徑 /usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/event.so #php.ini中啓用event擴展(下面路徑不對的話換成上面的全路徑) echo extension
=event.so > /usr/local/php/etc/php.ini

環境安裝完畢,接下來安裝workerman框架:git

git clone https://github.com/walkor/Workerman
或者直接將文件拷貝到你想要的位置

 基於php多進程以及libevent事件輪詢庫。不依賴php-fpm、nginx或者apache等這些容器即可以獨立運行github

Windows 將workerman下載下來當作vendor第三方插件同樣直接使用web

<本機ip>能夠爲0.0.0.0表示監聽本機全部網卡,包括內網ip和外網ip及本地迴環127.0.0.1

<本機ip>若是覺得127.0.0.1表示監聽本地迴環,只能本機訪問,外部沒法訪問

<本機ip>若是爲內網ip,相似192.168.xx.xx,表示只監聽內網ip,則外網用戶沒法訪問

<本機ip>設置的值不屬於本機ip則沒法執行監聽,而且提示Cannot assign requested address錯誤

注意:www/test 對應的是 www.demo.com  它的hosts設置的ip爲127.0.0.1(監聽本地迴環

例子1:http服務:www/test/httpServer.php     

<?php
use Workerman\Worker;
require_once dirname(__FILE__).'/vendor/Workerman/Autoloader.php';

// 建立一個Worker監聽2345端口,使用http協議通信
$http_worker = new Worker("http://www.demo.com:2345");

// 啓動4個進程對外提供服務
$http_worker->count = 4;

// 接收到瀏覽器發送的數據時回覆hello world給瀏覽器
$http_worker->onMessage = function($connection, $data)
{
    // 向瀏覽器發送hello world
    $connection->send('hello world');
};
Worker::runAll();

打開終端 鍵入文件所在目錄 輸入 php httpServer.php start -d    回車就創建http服務器了(無需開啓apache或者nginx)   注意修改了這些服務器文件必須 php httpServer.php restart

瀏覽器訪問www.demo.com:2345 或者127.0.0.1:2345   (瀏覽器顯示hello world)

 

websocket:www/test/websocketServer.php     

<?php
use Workerman\Worker;
require_once dirname(__FILE__).'/vendor/Workerman/Autoloader.php';

// 建立一個Worker監聽2345端口,使用http協議通信
$ws_worker = new Worker("websocket://0.0.0.0:2222");

// 啓動4個進程對外提供服務
$ws_worker->count = 4;

// 接收到瀏覽器發送的數據時回覆hello加上瀏覽器發送的數據拼接一塊兒發送給瀏覽器
$ws_worker->onMessage = function($connection, $data)
{
    // 向瀏覽器發送hello world
    $connection->send('hello'.$data);
};

Worker::runAll();

打開終端 鍵入文件所在目錄 輸入 php websocketServer.php start -d    回車就創建http服務器了(無需開啓apache或者nginx)   注意修改了這些服務器文件必須 php httpServer.php restart

websoket頁 index.php  :怎麼訪問他呢打開apache:訪問www.demo.com:80 

<html>
<head></head>
<body>
    <script type="text/javascript">
        var ws = new WebSocket("ws://www.demo.com:2222");//鏈接127.0.0.1:222
        ws.onopen=function(){
            ws.send('world');
        }
        ws.onmessage=function(e){
            console.log(e.data);//helloworld
        }
    </script>
</body
</html>

 

<本機ip>能夠爲0.0.0.0表示監聽本機全部網卡,包括內網ip和外網ip及本地迴環127.0.0.1

<本機ip>若是覺得127.0.0.1表示監聽本地迴環,只能本機訪問,外部沒法訪問

<本機ip>若是爲內網ip,相似192.168.xx.xx,表示只監聽內網ip,則外網用戶沒法訪問

<本機ip>設置的值不屬於本機ip則沒法執行監聽,而且提示Cannot assign requested address錯誤

 

 

使用Worker::$pidFile = '/var/run/workerman.pid';改變位置時,當他所在服務器啓後,而後註釋它以後在終端是殺不掉的,由於找不到pid路徑了

因此要先殺掉它啓動的服務而後在幹別的哦

 

Worker:onError()由如下幾種結果觸發

 

 

mysql代理: 實現 mysql -h127.0.0.1 -P4406 -uroot -p 鏈接到端口爲3306的mysql

 自定義協議

協議交互流程

1客戶端發送寫個數據包給服務端,服務端收到數據調用協議的input方法返回長度值$length給workerman框架

2獲得這個$length值後就會衝反衝區截取出$length長度的數據(即分包)並調用協議的decode方法解包,解包後的數據爲$data

3解包後的workerman將數據$data以回調onMesage($connection,$data)的形式傳遞給業務

4.服務端給客戶端發送數據時, workerman會自動利用協議的encode方法將$buffer打包後發送給客戶端

 

yum install php-cli php-process git gcc php-devel php-pear libevent-devel -y







基於workerman的GatewayWorker框架

下載: 

composer require workerman/gateway-woker
或者
git clone https://github.com/walkor/GatewayWorker

 工做原理

分佈式部署

建立wss服務(與https同樣 參考

相關文章
相關標籤/搜索