用workerman创建的WEBSOCKET获取客户端问题

backwang

在onConnect事件中可以通过getRemoteIp获取客户端信息,但是在onMessage事件中却没有这个方法。我这业务是在接收消息时要知道是哪个用户发送的并记录其ID或IP,所以不一定获取客户端IP,如果有唯一ID也可以。

1615 3 0
3个回答

xiuwang

onMessage里可以获得connection对象,直接调用 connection-> getRemoteIp 不行么?

$worker = new Worker('websocket://0.0.0.0:9090');
$worker->onMessage = function($connection, $message){
    var_export($connection->getRemoteIp());
};
  • backwang 2021-06-24

    这个方法在onConnect中是有的,但晨onmessage中没有

xiuwang

如果你需要唯一id,直接用 microtime(true); 生成一个时间戳就好了,怕重复的话再加个随机数。
用ip当唯一id不好,因为一个局域网里的出口ip是一样的,几个人在一个局域网里用你的系统,结果他们的id是一样的...,然后就bug了...

  • backwang 2021-06-24

    但是在onmesage中,无法找到在onConnect中创建的这个唯一ID,它们如何建立关联?

xiuwang

onConnect 和 onmesage 的$connection连接对象是一个啊,你把id赋值给$connection就好了。

$worker->onConnect = function($connection) {
    $connection->id = microtime(true).rand();
}

$worker->onConnect = function($connection, $message) {
    var_dump($connection->id);
}
  • 暂无评论
年代过于久远,无法发表回答
🔝