$ws_worker->onConnect = function ($connection){
global $ws_worker;
$key = 'connection_'.SERVER_ID.'_'.$ws_worker->id.'_'.$connection->id;
//111111111111111111111111111111111111111111111111
Channel\Client::on($key, function($event_data)use($connection){
//222222222222222222222222
Channel\Client::on('aaaaaa', function($multi_data)use($connection){
$connection->send('订阅的aaa事件');
});
$connection->send(‘111111111处订阅的事件’);
});
};
在onstart中 给每个connection订阅$key事件 $key中是唯一的 在以后中在222222处订阅群发aaaaa事件 但是每次只有最后一个连接可以接受到aaaaaa事件 为什么
aaaaaa事件被反复覆盖,最后只剩下最后一个是有效的
我这样在 onconnet中订阅aaa事件 不是每个connection都可以接受到这个aaa事件吗 目前我测试貌似只有2个可以收到 再多的链接就收不到aaa
你的代码是在onconnet中让Channel\Client订阅aaa事件,而不是每个connection订阅aaa事件。Channel\Client订阅aaa事件是一个全局事件,代码只不过是不停的更改Channel\Client订阅aaa事件的回调函数,但只有最后一个回调有效。
另外不停的给每个connection添加'connection_'.'_'.$ws_worker->id.'_'.$connection->id事件,链接关闭时又不解除事件监听,会导致对应事件所占内存一直被占用,内存越来越大,形成内存泄露。
群发做法类似下面做法:
workerman手册加了这个例子 https://www.kancloud.cn/walkor/workerman/346075
其实群发最好用GatewayWorker框架,这些都是有现成的接口,直接调用就好了。
好的 谢谢 我改用GatewayWorker了,但是Gateway怎么异步处理呢 就是GatewayWorker只管通信 我异步处理完了通知Gateway