目前我用worker来做服务器,没有用GatewayWorker,请问walkor大哥,如何实现向指定用户推送消息?
以下是我的代码:
$client_id = '';
$worker->onConnection( $connection ){
global $client_id;
$client_id = $connection->id;
};
$worker->onMessage( $connection, $data ){
global $client_id;
foreach( $connection->worker->connections as $con ){
if( $con->id == $client_id ){
$con->send( $data );
break;
}
}
};
注:在触发onConnect的时候,取得ClientID,然后在onMessage内将ClientID和用户其他资料绑定并储存到数据库。上述代码临时写出来的,我实际的需求是,基于worker向指定ClientID的在线用户推送消息,上面代码可能写成向当前用户推送了。
可以针对uid推送了,虽然是单进程,但是支持个1W在线是没问题的
注意只能单进程,多进程的话连接可能被分配到不同的进程,而不同的进程间是无法直接通讯的
有没有办法可以实现多进程?
可以多进程,类似GatewayWorker进程模型,或者用一个代理进程转发给其它进程
收到了,谢谢walkor,另外还有一个问题:控制客户端close是否能够通过上述代码来实现?
找到$connection,调用$connection->close();即可
使用类似代码时,貌似是全体在线用户均会触发close事件。
不会