这是我的onMessage
public function onMessage(ConnectionInterface $from, $msg) {
$tempMessage = json_decode($msg, TRUE);
if ($tempMessage['type'] == 'online') {
foreach ($this->clients as $client) {
if ($client == $from) {
echo "client " . $from->resourceId . "(" . $from->remoteAddress . ") is online\n";
}
}
}
}
是否可以将值保存在此$client对象中以供以后引用?
我知道可以为此保留一个数组,但这可能会变得很复杂,因为在文档中,我将客户端存储在SplObjectStorage
中
1条答案
按热度按时间t5zmwmid1#
通用方式
如果你看一下
\SplObjectStorage
的php documentation,你会发现你可以向一个对象添加信息,所以根据你的代码你可以像这样添加数据然后像这样取回它
简单/快速的方式
***免责声明:***这仅用于在onOpen中设置数据(例如:cookie),之后每次都克隆连接以传递给onMessage,从而使原始连接不可变,这就是为什么我不推荐使用此解决方案来设置与原始连接无关的数据,因为这可能会导致难以调试的错误
因为连接是一个php类,所以只要属性没有被定义为protected或private,就可以添加属性
在客户端类(In
\Ratchet\AbstractConnectionDecorator
)的源代码中,您将找到这意味着类只是
\React\Socket\Connection
的 Package ,它没有setter/getter。因此,您可以像处理对象一样处理属性
另一种方式
不是将客户端存储在
\SplObjectStorage
中,而是将它们存储在键控数组中,并使用spl_object_hash
生成密钥