Ich versuche eine einfache Chat-Anwendung mit AMQP, Websockets und Ruby zu erstellen. Ich verstehe, dass dies nicht der beste Anwendungsfall ist, um AMQP zu verstehen, aber ich würde gerne verstehen, wo ich falsch liege.
Der folgende Code ist mein amqp-server
%Vor%Ich verwende den Status, um anzuzeigen, ob die eingehende Nachricht eine Nachricht für einen fortlaufenden Chat oder für eine Statusnachricht ist, die es erfordert, dass ich Aufgaben wie Abonnieren in der Warteschlange behandle.
Das Problem, dem ich gegenüberstehe, ist, dass wenn ich eine Nachricht wie z
socket.send(JSON.stringify({status:'message', message:'test', roomname:'Harry Potter'}))
Die exchange.publish' is called but it still doesn't get pushed via the
ws.send 'an den Browser.
Gibt es etwas grundlegend falsches mit meinem Verständnis von EventMachine und AMQP?
Hier ist der Pastie für den gleichen Code Ссылка
Mein Code scheint wie gewünscht zu funktionieren, wenn ich durable => true
von queue = channel.queue(status[:username], :durable => true)
Das folgende ist ein Ausschnitt meiner Rails-Ansicht, der den Benutzernamen und den Raumnamen des Benutzers identifiziert und als Teil der Nachricht über WebSockets sendet.
Obwohl der Code zu funktionieren scheint, wenn ich durable => true
entferne, verstehe ich nicht, warum das die Nachricht betrifft, die geliefert wird. Bitte ignoriere den Mongo-Teil, da er noch keine Rolle spielt.
Ich würde auch gerne wissen, ob meine Herangehensweise an AMQP und seine Verwendung korrekt ist
%Vor%Ich denke, Ihr Problem könnte sein, dass die Warteschlange zwischen den Aufrufen von ws.onmessage auf dem Broker herumhängt. Wenn der Client die Warteschlange erneut verbindet und die Bindung bereits besteht, wird ws.send () nicht aufgerufen.
Wenn Sie eine Warteschlange erstellen, bleibt sie und alle Bindungen, die sie enthält, standardmäßig so lange hängen, bis der Broker neu gestartet wird, oder Sie weisen den Broker ausdrücklich an, ihn zu löschen.
Es gibt zwei Möglichkeiten, dies zu ändern:
Wenn Sie die Kontrolle über den Broker haben, den Sie mit dem rabbitmq-Broker verwenden, können Sie auf einfache Weise überprüfen, was auf dem Broker geschieht: Management-Plugin , das eine Web-Schnittstelle für Börsen, Bindungen und Warteschlangen auf dem Broker bereitstellt.