Miałem dokładnie to samo pytanie i oto, co zrobiłem.
Na podstawie hello world tutorial, podstawiłem obiekt SplObjectStorage z tablicą. Zanim przedstawię moje modyfikacje, chciałbym powiedzieć, że jeśli wykonałeś ten samouczek i zrozumiałeś go, jedyną rzeczą, która uniemożliwiła ci samodzielne znalezienie tego rozwiązania, prawdopodobnie nie jest wiedza o tym, co to jest 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();
}
}
Oczywiście, aby był naprawdę przydatny, możesz również dodać połączenie DB i zapisać/pobrać te identyfikatory zasobów.
Dziękuję za pomoc. – lexa
Dobry przykład dla React/ZMQ.Ale nie mogę się dowiedzieć, w jaki sposób mogę przekazać odpowiednie dane (na przykład specjalny json, który utworzyłem) odpowiedniemu użytkownikowi. Na przykład muszę wysłać dane do odpowiednich użytkowników (mam listy identyfikatorów użytkowników). Czy jest to konieczne, aby użytkownik był już subskrybowany do "określonej strony" (jak mówią tutaj: http://socketo.me/docs/push)? – lexa
igorw, chmura, którą chcemy jakoś połączyć (skype, exmaple), aby zadać pytanie bezpośrednio Tobie. I dziękuję za pomoc. – lexa