我有完全相同的問題,這就是我所做的。
基於hello world tutorial,我用一個數組替換了SplObjectStorage。在介紹我的修改之前,我想評論一下,如果你通過該教程並理解它,唯一阻止你自己到達此解決方案的事情可能不知道SplObjectStorage是什麼。
class Chat implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = array();
}
public function onOpen(ConnectionInterface $conn) {
// Store the new connection to send messages to later
$this->clients[$conn->resourceId] = $conn;
echo "New connection! ({$conn->resourceId})\n";
}
public function onMessage(ConnectionInterface $from, $msg) {
$numRecv = count($this->clients) - 1;
echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n"
, $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's');
foreach ($this->clients as $key => $client) {
if ($from !== $client) {
// The sender is not the receiver, send to each client connected
$client->send($msg);
}
}
// Send a message to a known resourceId (in this example the sender)
$client = $this->clients[$from->resourceId];
$client->send("Message successfully sent to $numRecv users.");
}
public function onClose(ConnectionInterface $conn) {
// The connection is closed, remove it, as we can no longer send it messages
unset($this->clients[$conn->resourceId]);
echo "Connection {$conn->resourceId} has disconnected\n";
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "An error has occurred: {$e->getMessage()}\n";
$conn->close();
}
}
當然,爲了使它非常有用,您可能還想添加數據庫連接,並存儲/檢索這些resourceIds。
謝謝你的幫助。 – lexa
React/ZMQ的好例子。但是我找不到如何將正確的數據(例如,我創建的特殊JSON)推送給適當的用戶。例如,我必須將數據發送給適當的用戶(我有用戶標識的列表)。這是必要的,用戶已經訂閱了'特定頁面'(就像他們在這裏說的:http://socketo.me/docs/push)? – lexa
igorw,我們要以某種方式連接雲(skype,例如)直接向您提出問題。並感謝您的幫助。 – lexa