代码如下 我是使用的workerman+tp3.2框架 worker类代码如下:
在类构造方法里 实例化一个\Channel\Server服务端 和 WebSocket服务端(在原代码的基础上新增Channel组件,webSocket是可以正常跑起来的,业务在用)
public function __construct(){
// Channel组件服务端 不传参数默认是监听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 "发布事件";
echo "\n\r";
echo "发送数据";
echo "\n\r";
var_dump($event_data);
});
}
最后在onMessage事件中 Client::publish 发布事件:
public function onMessage($connection, $data)
{
Client::publish('send_to_uid',array('uid'=>11111,'message'=>'1236456'));
echo "已发布";
}
但是并没有执行注册事件时的回调函数。执行结果如下:
请大佬指教。
Client::connect('127.0.0.1', 8865);下一行打印下日志,确认下是否真的运行了监听代码。我觉得有可能onWorkerStart没运行到。
onWorkerStart事件运行了 但是send_to_uid事件的function没有执行。
已解决。。把channel 服务单拆出去跑一个服务 就可以了 感谢大佬