MyClass.php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
class MyClass{
public function __construct(){}
public function onWorkerStart(Worker $worker){}
public function onConnect(TcpConnection $connection){}
public function onMessage(TcpConnection $connection, $message) {}
public function onClose(TcpConnection $connection){}
public function onWorkerStop(TcpConnection $connection){}
}
啟動腳本 start.php
use Workerman\Worker;
require_once __DIR__ . '/vendor/autoload.php';
// 載入MyClass
require_once __DIR__.'/MyClass.php';
$my_object = new MyClass();
// 調(diào)用類的方法
避免只能這樣
$worker->onWorkerStart = array($my_object, 'onWorkerStart');
$worker->onConnect = array($my_object, 'onConnect');
$worker->onMessage = array($my_object, 'onMessage');
$worker->onClose = array($my_object, 'onClose');
$worker->onWorkerStop = array($my_object, 'onWorkerStop');
感謝你的提議。
如果你覺得每次用類設(shè)置回調(diào)很麻煩,可以自己定義個函數(shù)例如
function worker_bind($worker, $class) {
$callback_map = [
'onConnect',
'onMessage',
'onClose',
'onError',
'onBufferFull',
'onBufferDrain',
'onWorkerStop',
'onWebSocketConnect'
];
foreach ($callback_map as $name) {
if (method_exists($class, $name)) {
$worker->$name = [$class, $name];
}
}
}
workerman注重精簡,只提供必要接口,所以一些可有可無的功能不會加上去。如果今天加一個,明天加一個,workerman會變得臃腫,這個不是大家想看到的。