wie man das connection-Objekt für einen bestimmten Benutzer?
Arbeite ich in einer real-time - Symfony - app mit Ratsche Bibliothek, in dieser app brauche ich, um Daten zu senden zu einem bestimmten Benutzer, so die Logik, die Lösung war die Verwendung der SessionProvider, das wird befestigen, Symfony2 Session-Objekt für jede eingehende Verbindung-Objekt.
Wie die Dokumentation besagt, ich habe setup eine nicht-native session-handler zu speichern, meine Sitzungen, d.h. in einer Datenbank via PDO.
und dass die Arbeit gut für den moment, aber ich brauche, um das Connection-Objekt für einen bestimmten Benutzer zu senden, ihm einige Daten, die so in anderen Weg, ich muss die connection-Objekt, das eine Referenz zu diesem user und ich kann nicht einen Weg finden, es zu tun ?
Sie ist mein server code :
$app=new AggregateApplication();
$loop = \React\EventLoop\Factory::create();
$context = new \React\ZMQ\Context($loop);
$pull = $context->getSocket(\ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', array($app, 'onNotification'));
$webSock = new \React\Socket\Server($loop);
$webSock->listen(8080, '127.0.0.1');
$handler = $this->getContainer()->get('session.handler');
$server=new \Ratchet\Wamp\WampServer($app);
$server = new SessionProvider($server, $handler);
$webServer = new \Ratchet\Server\IoServer(new \Ratchet\WebSocket\WsServer($server),$webSock);
$loop->run();
- Aber wie das senden einer Nachricht an einen bestimmten Benutzer? Wie implementieren Sie diese in dem Beispiel von 2-clients eine Verbindung mit einem WebSocket-server, jeder mit seiner eigenen connection-Objekt :$ConnSender,$ConnReceiver? Bitte klären Sie mich ich nicht finden, eine Antwort auf diese auf ratchet tag SO.Dank
- jedes mal, wenn ein Benutzer verbunden ist, um den websocket-server bekomme ich seine Id und ich seine speichern connection-Objekt in ein array, indiziert mit seiner Id, so dass, wenn ich will zu senden einige Daten auf dem client bekomme ich nur seine connection-Objekt über seine Id und ich schicke meine Daten.
- Ich verstehe, was du meinst, aber bitte lassen Sie mich hinzufügen, eine andere Frage, denn es ist nicht klar für mich. Wenn ich mein array mit zwei connection-Objekte mit zwei verschiedenen IDs (Id1 von sender-und Id2-Empfänger), wie wird der WebSocket-server bekommen, Id2, ihn zu senden der Nachricht?
$client = $this->clients[$Id2];$client->send("Message");
- Durch die Verwendung von symfony, können Sie die Kommunikation zwischen Ihnen wieder symfony-app und der websocket-server mit ZMQ also, wenn Sie wan ' T senden einer Nachricht an client client1 $context = new ZMQContext(); $socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'myPusher'); $socket->connect("tcp://localhost:5555"); $entryData="{'id':'1','Daten':'einige Daten zu senden'}" $socket->senden(Funktionen json_encode($entryData));
- Danke Anas. Und ich bin sehr Leid für die Umsetzung mehr newbie-Fragen hier. Wenn ich Sie gut verstehe, sollte ich auch die Karte
user_id
zuresourceId
irgendwo (vielleicht in einer db-Tabelle). bin ich im Recht? die Indizierung der Arrays mit ResourceId ist nicht genug. Ich möchte in der Lage sein, um eine Nachricht zu senden Id2, ohne mit ZeroQM (da ich keine Interaktion mit den App-Skript, das ich verwenden werden entity-manager-Dienst in meinem Chat Klasse zu bestehen-Nachrichten). Sollte ich unbedingt vorbei stackoverflow.com/questions/17558657/...? - Definitiv es ist nicht nötig, aber was es empfohlen wird, alle Daten, die Sie senden, vom client zum server gemacht werden müssen, die mit ajax in einer http-Anforderung, die Sie verwenden sollten ZMQ zu sagen webSocketServer zu senden, die gleichen Daten auf einem anderen client mit webSockets, weil es eine Frage der Sicherheit, wenn Sie Händel-Daten in Sie re websocket-server. und auch wenn du den thread in dem link, den Sie weitergeben, indem Sie die re app-code in den thread
- Aaah! vielen Dank für diese Zusatzinformationen. Ich sehe jetzt. Vom client zum server, ich schicke AJAX-call mit
sender_id
,receiver_id
undmessage
. Mit ZeroQM, schicke ich das ganze Zeug zum Websocket-server. dann in meinem Chat der Klasse, rufe ich die Verbindung vonreceiver_id
ausclients
array und senden Sie ihm die Nachricht. - Genau das war meine Lösung.
- ich danke Ihnen sehr, sir, für Ihre Erfahrungen, gerade in diesem Teil des PHP-Programmierung, die wirklich fehlt, einfache und klare doc ( in der Betrachtung der newbs).
- Anas, bitte ich umgesetzt, 90 Prozent von dem, was wir diskutiert haben, ich brauche nur Ihre Hilfe für den verbleibenden Teil stackoverflow.com/questions/29576033/.... nochmals vielen Dank
- Ich habe geschrieben, eine Antwort hoffe, die helfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte das exakt gleiche Frage, die ich mir (minus Symfony) und hier ist was ich getan habe.
Basiert auf der Hallo Welt tutorial, habe ich ersetzt SplObjectStorage mit einem array. Vor der Darstellung meiner änderungen, würde ich mag zu kommentieren, dass, wenn Sie gefolgt durch das tutorial und es so verstanden, das einzige, was verhindert, dass Sie von der Ankunft in dieser Lösung selbst ist wohl nicht zu wissen, was SplObjectStorage ist.
Natürlich machen es wirklich nützlich, Sie können auch hinzufügen möchten, in eine DB-Verbindung, und speichern/abrufen dieser resourceIds.
dies ist, was ich Tat, hat einige Verbesserungen auf der gleichen Idee.
fügt 2 Funktionen, die Sie aufrufen können anderswo: send_to() und multicast().