在onConnect事件中可以通過getRemoteIp獲取客戶端信息,但是在onMessage事件中卻沒有這個(gè)方法。我這業(yè)務(wù)是在接收消息時(shí)要知道是哪個(gè)用戶發(fā)送的并記錄其ID或IP,所以不一定獲取客戶端IP,如果有唯一ID也可以。
如果你需要唯一id,直接用 microtime(true); 生成一個(gè)時(shí)間戳就好了,怕重復(fù)的話再加個(gè)隨機(jī)數(shù)。
用ip當(dāng)唯一id不好,因?yàn)橐粋€(gè)局域網(wǎng)里的出口ip是一樣的,幾個(gè)人在一個(gè)局域網(wǎng)里用你的系統(tǒng),結(jié)果他們的id是一樣的...,然后就bug了...
onConnect 和 onmesage 的$connection連接對象是一個(gè)啊,你把id賦值給$connection就好了。
$worker->onConnect = function($connection) {
$connection->id = microtime(true).rand();
}
$worker->onConnect = function($connection, $message) {
var_dump($connection->id);
}