Workerman是一個非同步事件驅動的PHP框架,具有高效能,可輕鬆建立快速,可擴展的網路應用程式。支援HTTP,Websocket,SSL和其他自訂協(xié)定。
怎麼使用workerman?
要求
PHP 5.3或更高版本
安裝
下載後解壓縮即可
網址:https://www.workerman.net/download
workerman使用步驟
建立一個普通的DAEMON
$worker = new Worker(); $worker::$pidFile = $config['pid']; $worker::$logFile = $config['log']; $worker->name = $config['title']; $worker->count = $config['num']; $worker->onWorkerStart = function($worker){ //執(zhí)行一個回調函數(shù) call_user_func('******'); }; Worker::runAll();
#建立一個定時任務(支援秒級)
<?php use \Workerman\Worker; use \Workerman\Lib\Timer; require_once './Workerman/Autoloader.php'; $task = new Worker(); // 開啟多少個進程運行定時任務,注意多進程并發(fā)問題 $task->count = 1; $task->onWorkerStart = function($task) { // 每1秒執(zhí)行一次 支持小數(shù),可以精確到0.001,即精確到毫秒級別 $time_interval = 1; Timer::add($time_interval, function() { echo "****\n"; }); }; Worker::runAll();
# php給客戶端即時發(fā)送訊息
1、建立一個websocket Worker,用來維持客戶端長連線
2、websocket Worker內部建立一個text Worker
3、websocket Worker 與text Worker是同一個進程,可以方便的共享客戶端連線
#4、某個獨立的php後臺系統(tǒng)透過text協(xié)定與text Worker通訊
5、 text Worker操作websocket連線完成資料推送
push.php
<?php use Workerman\Worker; require_once './Workerman/Autoloader.php'; // 初始化一個worker容器,監(jiān)聽1234端口 $worker = new Worker('websocket://0.0.0.0:1234'); /* * 注意這里進程數(shù)必須設置為1,否則會報端口占用錯誤 * (php 7可以設置進程數(shù)大于1,前提是$inner_text_worker->reusePort=true) */ $worker->count = 1; // worker進程啟動后創(chuàng)建一個text Worker以便打開一個內部通訊端口 $worker->onWorkerStart = function($worker) { // 開啟一個內部端口,方便內部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符 $inner_text_worker = new Worker('text://0.0.0.0:5678'); $inner_text_worker->onMessage = function($connection, $buffer) { // $data數(shù)組格式,里面有uid,表示向那個uid的頁面推送數(shù)據(jù) $data = json_decode($buffer, true); $uid = $data['uid']; // 通過workerman,向uid的頁面推送數(shù)據(jù) $ret = sendMessageByUid($uid, $buffer); // 返回推送結果 $connection->send($ret ? 'ok' : 'fail'); }; // ## 執(zhí)行監(jiān)聽 ## $inner_text_worker->listen(); }; // 新增加一個屬性,用來保存uid到connection的映射 $worker->uidConnections = array(); // 當有客戶端發(fā)來消息時執(zhí)行的回調函數(shù) $worker->onMessage = function($connection, $data) { global $worker; // 判斷當前客戶端是否已經驗證,既是否設置了uid if(!isset($connection->uid)) { // 沒驗證的話把第一個包當做uid(這里為了方便演示,沒做真正的驗證) $connection->uid = $data; /* 保存uid到connection的映射,這樣可以方便的通過uid查找connection, * 實現(xiàn)針對特定uid推送數(shù)據(jù) */ $worker->uidConnections[$connection->uid] = $connection; return; } }; listen // 當有客戶端連接斷開時 $worker->onClose = function($connection) { global $worker; if(isset($connection->uid)) { // 連接斷開時刪除映射 unset($worker->uidConnections[$connection->uid]); } }; // 向所有驗證的用戶推送數(shù)據(jù) function broadcast($message) { global $worker; foreach($worker->uidConnections as $connection) { $connection->send($message); } } // 針對uid推送數(shù)據(jù) function sendMessageByUid($uid, $message) { global $worker; if(isset($worker->uidConnections[$uid])) { $connection = $worker->uidConnections[$uid]; $connection->send($message); return true; } return false; } // 運行所有的worker Worker::runAll();
啟動後端服務
php push.php start -d
前端程式碼
var ws = new WebSocket('ws://127.0.0.1:1234'); ws.onopen = function(){ var uid = 'uid1'; ws.send(uid); }; ws.onmessage = function(e){ alert(e.data); };
php背景程式碼##
// 建立socket連接到內部推送端口 $client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1); // 推送的數(shù)據(jù),包含uid字段,表示是給這個uid推送 $data = array('uid'=>'uid1', 'percent'=>'88%'); // 發(fā)送數(shù)據(jù),注意5678端口是Text協(xié)議的端口,Text協(xié)議需要在數(shù)據(jù)末尾加上換行符 fwrite($client, json_encode($data)."\n"); // 讀取推送結果 echo fread($client, 8192);
#建立一個簡單的webserver
use \Workerman\Worker; use \Workerman\WebServer; require_once __DIR__ . '/Workerman/Autoloader.php'; // 這里監(jiān)聽8080端口,如果要監(jiān)聽80端口,需要root權限,并且端口沒有被其它程序占用 $webserver = new WebServer('http://0.0.0.0:8080'); // 類似nginx配置中的root選項,添加域名與網站根目錄的關聯(lián),可設置多個域名多個目錄 $webserver->addRoot('www.example.com', '/your/path/of/web/'); $webserver->addRoot('blog.example.com', '/your/path/of/blog/'); // 設置開啟多少進程 $webserver->count = 4; Worker::runAll();
##Workerman支援的特性
- 純PHP開發(fā),多進程支持,支援php7,支援hhvm
- 支援TCP/UDP,單機可支援數(shù)百萬以上TCP長連線
- 支援分散式部署,叢集能支援數(shù)百萬甚至更高的並發(fā)TCP連線
- 支援libevent事件觸發(fā)網路庫
- 支援熱更新及伺服器平滑重啟
- 有異步Mysql、Redis、Dns等眾多高效能元件
- PHP中文網,有大量免費的
以上是怎麼使用workerman?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

實現(xiàn)Workerman文件中的文件上傳與下載,需要具體程式碼範例引言:Workerman是一款高效能的PHP非同步網路通訊框架,具備簡潔、高效、易用等特點。在實際開發(fā)中,文件上傳和下載是常見的功能需求,本文將介紹如何使用Workerman框架實現(xiàn)文件的上傳和下載,並給出具體的程式碼範例。一、檔案上傳:檔案上傳是指將本機上的檔案傳輸至伺服器端的操作。下面是使用

Swoole 和 Workerman 都是高效能 PHP 伺服器框架。 Swoole 以其非同步處理、出色的效能和可擴展性而聞名,適用於需要處理大量並發(fā)請求和高吞吐量的專案。 Workerman 提供了非同步和同步模式的靈活性,具有直覺的 API,更適合易用性和處理較低並發(fā)量的專案。

如何實現(xiàn)Workerman文件的基本使用方法簡介:Workerman是一個高效能的PHP開發(fā)框架,它可以幫助開發(fā)者輕鬆建立高並發(fā)的網路應用程式。本文將介紹Workerman的基本使用方法,包括安裝和設定、建立服務和監(jiān)聽連接埠、處理客戶端請求等。並給出相應的程式碼範例。一、安裝並設定Workerman在命令列中輸入以下命令來安裝Workerman:c

如何實現(xiàn)Workerman文件中的定時器功能Workerman是一款強大的PHP非同步網路通訊框架,它提供了豐富的功能,其中就包括定時器功能。使用定時器可以在指定的時間間隔內執(zhí)行程式碼,非常適合定時任務、輪詢等應用程式場景。接下來,我將詳細介紹如何在Workerman中實現(xiàn)定時器功能,並提供具體的程式碼範例。第一步:安裝Workerman首先,我們需要安裝Worker

Workerman開發(fā):基於UDP協(xié)議的即時視訊通話摘要:本文將介紹如何使用Workerman框架實現(xiàn)基於UDP協(xié)議的即時視訊通話功能。我們將深入了解UDP協(xié)議的特點,並透過程式碼範例展示如何建立一個簡單但完整的即時視訊通話應用程式。引言:在網路通訊中,即時視訊通話是一項非常重要的功能。傳統(tǒng)的TCP協(xié)定在實現(xiàn)即時性較高的視訊通話時,可能會有傳輸延遲等問題。而UDP

如何實現(xiàn)Workerman文件中的反向代理功能,需要具體程式碼範例簡介:Workerman是一款高效能的PHP多進程網路通訊框架,提供了豐富的功能和強大的效能,廣泛應用於Web即時通訊、長連接服務等場景。其中,Workerman也支援反向代理功能,可實現(xiàn)伺服器對外提供服務時的負載平衡和靜態(tài)資源快取等功能。本篇文章將介紹如何使用Workerman實現(xiàn)反向代理功

如何使用Workerman建立高可用性負載平衡系統(tǒng),需要具體程式碼範例在現(xiàn)代技術領域中,隨著網路的快速發(fā)展,越來越多的網站和應用程式需要處理大量的並發(fā)請求。為了實現(xiàn)高可用性和高效能,負載平衡系統(tǒng)成為了必不可少的組件之一。本文將介紹如何使用PHP開源框架Workerman建構一個高可用性的負載平衡系統(tǒng),並提供具體的程式碼範例。一、Workerman簡介Worke

Workerman是基於PHP開發(fā)的高效能非同步事件驅動框架,它可以輕鬆實現(xiàn)TCP/UDP協(xié)定下的長連線開發(fā)。除此之外,Workerman也提供了實現(xiàn)檔案傳輸?shù)墓δ?,可以用於大檔案傳輸、資料備份等場景。本文將介紹如何在Workerman中實現(xiàn)檔案傳輸功能,並提供具體的程式碼範例。一、文件上傳功能實現(xiàn)文件上傳功能需要客戶端將要上傳的文件傳送給服務端,服務端驗證
