- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
问候 stackoverflow 的人们,最近几天我一直在研究 websockets 和一个名为 Ratchet 的 PHP 库(这是用 PHP 编写 websockets 服务器应用程序的理想选择)。在 Ratchet 官方文档中,他们推荐使用 SplObjectStorage(我从未听说过)来管理客户端连接对象。
在大多数服务器应用程序中,您可能需要保留一些关于每个客户端的数据(例如,在我尝试编写一个简单的消息传递服务器的情况下,我需要保留诸如客户端昵称之类的数据,也许还有更多),所以据我了解,当打开新连接时,我可以将客户端对象和包含客户端数据的数组添加到 SplObjectStorage,如下所示。
public function onOpen(ConnectionInterface $conn) {
//$this->clients is the SplObjectStorage object
$this->clients[$conn] = array('id' => $conn->resourceId, 'nickname' => '');
}
但是,我不确定通过数据数组中的值(例如通过用户昵称)从 SplObjectStorage 获取对象的最佳方法是什么,一种方法是这样的:
//$this->clients is my SplObjectStorage object where I keep all incoming connections
foreach($this->clients as $client){
$data = $this->clients->offsetGet($client);
if($data['nickname'] == $NickNameIAmLookingFor){
//Return the $client object or do something nice
}
}
但我觉得有更好的方法可以做到这一点,因此我们将不胜感激任何建议。
提前致谢。
最佳答案
无需使用 SplObjectStorage。使 clients
成为以 resourceId
为键的数组,并为 nicknames
做同样的事情。
// in __construct()
$this->clients = [];
$this->nicknames = [];
// in onOpen
$this->clients[$conn->resourceId] = $conn;
$this->nicknames[$conn->resourceId] = '';
然后你就可以像这样访问它们了
$this->clients[$conn->resourceId]
$this->nicknamees[$conn->resourceId]
您可以有更复杂的数组(也许您想将它们全部放在一个嵌套数组中),但解决方案在于将该数组的第一级键设为 resourceId。
关于php - 在 splobjectstorage 中查找数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19731811/
PHP 文档不是很明确,仅指出: SplObjectStorage::offsetExists 检查存储中是否存在对象。 (PHP >= 5.3.0) SplObjectStorage::contai
我有一个 SPLObjectStorage 对象,其中 Player 对象作为键,分数作为与之关联的信息。玩家对象按照从最高分到最低分的顺序添加到存储中,但我现在需要以相反的顺序遍历它们。 我还需要能
我有一个 SPLObjectStorage 对象,其中 Player 对象作为键,分数作为与之关联的信息。玩家对象按照从最高分到最低分的顺序添加到存储中,但我现在需要以相反的顺序遍历它们。 我还需要能
我找到了 this comment on the PHP doc page并对此感到惊讶。 他的评论可能不是最好的,但我想知道为什么以下脚本的输出是“left in the storage: 2”?以
我遇到了一些情况,我正在使用 SplObjectStorage 对象,有时我需要附加一个项目并将其推到列表的顶部,这样当我遍历这些项目时,我会将它作为第一个对象获取。 即 $splObj->attac
我正在编写代码来管理独特对象的集合。这段代码的第一个原型(prototype)使用了一个关联数组,基本上我一直都是这样做的。 但是,我也热衷于利用添加到更现代版本的 PHP 中的功能,例如 [SplO
是否可以访问 SplObjectStorage 的数据?使用反射或其他方法?当我使用 print_r在上面,我可以看到有一个私有(private)属性(property)$storage使用包含所有数
我已经使用 SplObjectStorage 实现了一个简单的复合模式,如上例所示: class Node { private $parent = null; public funct
问候 stackoverflow 的人们,最近几天我一直在研究 websockets 和一个名为 Ratchet 的 PHP 库(这是用 PHP 编写 websockets 服务器应用程序的理想选择)
我正在使用 SplObjectStorage保留有关托管对象的信息。当我的对象被破坏时,我希望 SplObjectStorage 自动清理不再有外部引用的对象。 我现在只能看到两个选项: 让托管对象的
我有一个 SplObjectStorage 实例,它存储要在容器中呈现的元素对象。我希望能够从商店中的任意随机位置高效地添加和删除对象。 例子: attach($obj1); $store->atta
我使用 PHP Ratchet 构建了一个聊天应用。 我将所有连接存储在 SplObjectStorage 中。 每个连接都有用户 ID,我将通过此附加他: public function __
如果 SplObjectStorage 实例在仍然附加了一些对象的情况下析构,它是先隐式地分离对象,还是由于 SplObjectStorage 的引用而导致内存泄漏那些悬挂的物体?我正在尝试确定是否有
在下面的代码中: $storage = new \SplObjectStorage(); $fooA = new \StdClass(); $fooB = new \StdClass(); $stor
有人建议 e 使用 SplObjectStorage 来跟踪一组独特的事物。很好,除了它不适用于字符串。错误提示“SplObjectStorage::attach() 期望参数 1 为对象,第 59
快点;我怀疑这是可能的,但是有什么方法可以利用 array($key => $value); PHP 的语法来处理 SplObjectStorage 对象? 我的意思是,有没有这样的方法可以实现: $
为什么UnexpectedValueException会在session_start()中抛出? 我的对象具有 SPLObjectstorage 的属性。该对象被分配给 session ,如 $_SE
在 PHP 5.4 中,我有一个 SplObjectStorage 实例,我在其中将对象与一些额外的元数据相关联。然后我需要遍历 SplObjectStorage 的实例并检索与当前键关联的对象。我尝
我是一名优秀的程序员,十分优秀!