代碼如下 我是使用的workerman+tp3.2框架 worker類代碼如下:
在類構造方法里 實例化一個\Channel\Server服務端 和 WebSocket服務端(在原代碼的基礎上新增Channel組件,webSocket是可以正常跑起來的,業(yè)務在用)
public function __construct(){
// Channel組件服務端 不傳參數默認是監(jiān)聽0.0.0.0:2206
$channel_server = new Server('0.0.0.0',8865);
$this->worker = new Worker('websocket://0.0.0.0:8866');// 實例化 Websocket 服務
$this->worker->count = 10;// 設置進程數
$this->worker->name ='pusher';
$this->init();//初始化
$this->worker->uidConnections = array();
// 設置回調
foreach (['onWorkerStart', 'onConnect', 'onMessage', 'onClose', 'onError', 'onBufferFull', 'onBufferDrain', 'onWorkerStop', 'onWorkerReload'] as $event) {
if (method_exists($this, $event)) {
$this->worker->$event = [$this, $event];
}
}
// Run worker
Worker::runAll();
}
在 worker進程 onWorkerStart 事件中注冊事件 send_to_uid 代碼如下:
/**
* 每個進程啟動
* @param $worker
*/
public function onWorkerStart($worker)
{
// Channel客戶端連接到Channel服務端
Client::connect('127.0.0.1', 8865);
//注冊事件
$a = Client::on('send_to_uid',function ($event_data)use ($worker){
echo "發(fā)布事件";
echo "\n\r";
echo "發(fā)送數據";
echo "\n\r";
var_dump($event_data);
});
}
最后在onMessage事件中 Client::publish 發(fā)布事件:
public function onMessage($connection, $data)
{
Client::publish('send_to_uid',array('uid'=>11111,'message'=>'1236456'));
echo "已發(fā)布";
}
但是并沒有執(zhí)行注冊事件時的回調函數。執(zhí)行結果如下:
請大佬指教。
public function onWorkerStart($worker)
{
// Channel客戶端連接到Channel服務端
Client::connect('127.0.0.1', 8865);
//注冊事件
$a = Client::on('send_to_uid',function ($event_data)use ($worker){
echo "發(fā)布事件";
echo "\n\r";
echo "發(fā)送數據";
echo "\n\r";
var_dump($event_data);
});
}
Client::connect('127.0.0.1', 8865);下一行打印下日志,確認下是否真的運行了監(jiān)聽代碼。我覺得有可能onWorkerStart沒運行到。