在onConnect事件中可以通过getRemoteIp获取客户端信息,但是在onMessage事件中却没有这个方法。我这业务是在接收消息时要知道是哪个用户发送的并记录其ID或IP,所以不一定获取客户端IP,如果有唯一ID也可以。
onMessage里可以获得connection对象,直接调用 connection-> getRemoteIp 不行么?
$worker = new Worker('websocket://0.0.0.0:9090'); $worker->onMessage = function($connection, $message){ var_export($connection->getRemoteIp()); };
这个方法在onConnect中是有的,但晨onmessage中没有
如果你需要唯一id,直接用 microtime(true); 生成一个时间戳就好了,怕重复的话再加个随机数。 用ip当唯一id不好,因为一个局域网里的出口ip是一样的,几个人在一个局域网里用你的系统,结果他们的id是一样的...,然后就bug了...
但是在onmesage中,无法找到在onConnect中创建的这个唯一ID,它们如何建立关联?
onConnect 和 onmesage 的$connection连接对象是一个啊,你把id赋值给$connection就好了。
$worker->onConnect = function($connection) { $connection->id = microtime(true).rand(); } $worker->onConnect = function($connection, $message) { var_dump($connection->id); }
onMessage里可以获得connection对象,直接调用 connection-> getRemoteIp 不行么?
这个方法在onConnect中是有的,但晨onmessage中没有
如果你需要唯一id,直接用 microtime(true); 生成一个时间戳就好了,怕重复的话再加个随机数。
用ip当唯一id不好,因为一个局域网里的出口ip是一样的,几个人在一个局域网里用你的系统,结果他们的id是一样的...,然后就bug了...
但是在onmesage中,无法找到在onConnect中创建的这个唯一ID,它们如何建立关联?
onConnect 和 onmesage 的$connection连接对象是一个啊,你把id赋值给$connection就好了。