Events::onConnect
说明:
void Events::onConnect(string $client_id);
当客户端连接上 gateway 进程时 (TCP 三次握手完毕时) 触发的回调函数。
参数
$client_id
client_id 固定为 20 个字符的字符串,用来全局标记一个 socket 连接,每个客户端连接都会被分配一个全局唯一的 client_id。
如果 client_id 对应的客户端连接断开了,那么这个 client_id 也就失效了。当这个客户端再次连接到 Gateway 时,将会获得一个新的 client_id。也就是说 client_id 和客户端的 socket 连接生命周期是一致的。
client_id 一旦被使用过,将不会被再次使用,也就是说 client_id 是不会重复的,即使分布式部署也不会重复。
只要有 client_id,并且对应的客户端在线,就可以调用 Gateway::sendToClient($client_id, $data)
等方法向这个客户端发送数据。
返回值
无返回值,任何返回值都会被视为无效的
注意
$client_id
是服务端自动生成的并且无法自定义。
如果开发者有自己的 id 系统,可以用过 Gateway::bindUid($client_id, $uid)
把自己系统的 id 与 client_id 绑定,绑定后就可以通过 Gateway::sendToUid($uid)
发送数据,通过 Gateway::isUidOnline($uid)
用户是否在线了。
onConnect 事件仅仅代表客户端与 gateway 完成了 TCP 三次握手,这时客户端还没有发来任何数据,此时除了通过 $_SERVER['REMOTE_ADDR']
获得对方 ip,没有其他可以鉴别客户端的数据或者信息,所以在 onConnect 事件里无法确认对方是谁。要想知道对方是谁,需要客户端发送鉴权数据,例如某个 token 或者用户名密码之类,在 onMesssge 里做鉴权。
onConnect 范例
use \GatewayWorker\Lib\Gateway;
class Events
{
public static function onConnect($client_id)
{
Gateway::sendToCurrentClient("Your client_id is $client_id");
}
}