2016-07-14 13 views
0

Ich habe einen ziemlich einfachen Chat-Dienst mit Rails 5 und ActionCable. Es erlaubt dem Benutzer, 1 von einer Handvoll von Zimmern zu wählen, und alles funktioniert super und es hat super Spaß gemacht.Verwendung von ActionCable zusammen mit Geolocation-Diensten

Das nächste Problem, das ich angehen möchte, ist die Verwendung von Geolocation, um nur Nachrichten anzuzeigen, die sich in X-Meilen befinden. Ich habe Längen- und Breitengrad im Nachrichtenmodell und bin mir bewusst, dass Geokit und Geocoder sind, sodass ich weiß, dass ich Nachrichten in einer bestimmten Entfernung zum Benutzer finden kann. Was ich nicht begriffen kann, ist die Verwendung in Verbindung mit ActionCable. Die Idee klang so einfach in meinem Kopf, aber als es Zeit für die Umsetzung war, kann ich mir nicht vorstellen, wie ich das elegant hinbekomme. Erlaube ich einfach alle Zimmernachrichten und filtere sie durch JavaScript auf dem Client? Das scheint eine Art Hacky zu sein und eine Verschwendung von Bandbreite für eine Reihe von Nachrichten, die für den Client sind, ohne jemals die Schnittstelle zu erreichen. Leider ist dies die einzige Methode, an die ich denken konnte.

+0

würden Sie keine Suche nach Nachrichten wie so '@mesages = Message.where (message.distance_to (user.address)

+0

Dies würde funktionieren, um die erste Sammlung von letzten Nachrichten aber Für die ActionCable-Übertragung müsste ich nur an die Benutzer im Bereich dieser Nachricht senden. –

+0

Entschuldigung keine Kenntnis von ActionCable, aber die Auswahl dort kann umgekehrt werden, wo Sie selektiv auswählen können, welcher Benutzer was bekommt –

Antwort

0

Ich habe es geschafft, dies funktioniert durch die Verwendung Maidenhead Gitter Quadrate, um das Land zu teilen und mit ActionCable Broadcasting auf das Maidenhead-Gitter berechnet von der Breite und Länge von der Geolocation API zurückgegeben. Als Benutzer habe ich ihn abonniert, um das Maidhead-Gitter zu hören, in dem sie sich befanden, und benachbarte Gitter, soweit ich die grobe Entfernung haben wollte.