Sala de chat pública con radio con Firebase (Sugerencias solicitadas)

Quiero integrar una sala de chat pública dentro de mi aplicación, pero no tengo ni idea de cómo crear el back-end.

Uso firebase para mi aplicación y la configuration es simple entre dos usuarios o un grupo de usuarios. Creo una sala privada basada en un punto de reference en Firebase que permite a los usuarios de ese grupo acceder a los posts.

Ahora diga que estoy en LA, quiero que los usuarios puedan chatear con otros usuarios que se encuentren a un radio de 1 milla de su location (lat / lng). Sé que es posible ya que hay una aplicación que hace esto que se puede encontrar en https://itunes.apple.com/sg/app/popcorn-messaging/id718416705?mt=8 .

Solo lea lo siguiente si desea saber qué he intentado. Puede ser un poco confuso.

Una forma en que pensé en hacer esto es crear una sala de chat en todo el mundo con un espacio de millas. Por ejemplo, comience con lat: 0, lng: 0 y luego mueva una milla a la derecha, luego a otra milla a la derecha, etc. sin embargo, eso hace más daño que bien. Tendré millones de salas de chat y no todas usadas.

La segunda forma que pensé que podía implementar es crear una sala de chat si no existe dentro del radio de un usuario. Así que si estoy en LA y no hay salas de chat, crearía una en esa location y, digamos, si otra persona va a LA porque una sala de chat ya se creó dentro de una location de 1 milla, cargará la sala de chat para ese usuario .

Cualquier sugerencia será muy apreciada.

Si está seguro de que quiere que sea de 1 milla por 1 milla o cualquier tipo de distancia establecida, creo que las salas de chat pnetworkingefinidas en todo el mundo con un espacio de millas es la mejor opción. Esto será mucho más simple en cuanto a la adición de nuevos usuarios y evitar superposiciones cuando las personas mueven ubicaciones. Si está utilizando Firebase y aplana correctamente sus datos, no se lastimará demasiado al tener habitaciones vacías.

La única razón por la que no podría hacer esto es si te preocupa que las salas de chat estén demasiado llenas o demasiado vacías. No estoy seguro si eso es una preocupación para su aplicación, pero sin duda sería un inconveniente de tener ubicaciones pnetworkingefinidas. Incluso entonces, podría usar las ubicaciones pnetworkingefinidas y networkingucir la escala (separar las habitaciones) o escalar (combinar salas juntas) según cuántas personas estén en las habitaciones.

Espero que esto ayude. Si buscas más orientación, ¿podrías contarnos un poco más sobre tu request?

ACTUALIZACIÓN: veo lo que estás diciendo. Después de seguir pensando, todavía creo que las áreas pnetworkingeterminadas serían el mejor path a seguir. Incluso si creas nuevas áreas de manera espontánea, todavía habrá un punto en el que necesitarás dividir las habitaciones (dibujar los límites entre las habitaciones) y los usuarios a ambos lados de esa línea, aunque estén justo uno al lado del otro, serán en diferentes habitaciones

Si se basa solo en lat / lng y un radio alnetworkingedor de esos usuarios, eso también podría terminar con resultados extraños. Por ejemplo, si el usuario B está en una habitación con el usuario A y C, pero los usuarios A y C están demasiado lejos el uno del otro, podrían ver algunos posts de chat muy extraños. Por ejemplo, si ese radio fuera de 1 milla, el User A podría estar en la Mile 0 , el User B podría estar en la Mile 1 y el User C en la Mile 2 . Entonces, para el User A (que solo puede ver el User A y el User C ) `el chat podría verse así:

 User A: Hello there! What is 2+2? User B: 4 User A: Thank you! User B: George Washington User A: What?!?! 

Para el User B (que es el único que verá todos los posts) podría verse así:

 User A: Hello there! What is 2+2? User B: 4 User A: Thank you! User C: Who was the first president of the United States? User B: George Washington User C: Thank you! User A: What?!?! 

Para el User C (que solo puede ver el User B y el User C ), podría verse así:

 User B: 4 User C: Who was the first president of the United States? User B: George Washington User C: Thank you! 

Parece que esto podría salirse de control rápidamente. Después de todo eso, creo que mi sugerencia original sigue siendo la mejor, pero creo que todos tendrán desafíos. ¡Buena suerte!

Lo haría así:

Conceptualmente, una sala de chat es una list de usuarios.

Lo que puede hacer es calcular una "sala de chat" para cada usuario cuando se registre. Como @Luke señala, tendrá algunos límites para el geo radio y el número mínimo / máximo de usuarios que regresa.

Estas llamadas salas de chat (que en realidad son lists de usuarios cercanos) pueden almacenarse en caching en function de alguna firma de usuario (agente de usuario de IP +)

Hay cierta complejidad y hay habitaciones superpuestas, pero se encarga de eso en cada inicio de session haciendo un recuento basado en quién está en línea cuando llega un nuevo usuario.

Puede limitar el cálculo, es decir, get usuarios en un radio de 300 y luego calcular la proximidad en un radio de 100

Otro enfoque: puede crear un diagtwig de Voronoi de los usuarios y presentar zonas adyacentes para un usuario determinado como vecinos de chat

Referencia: https://en.wikipedia.org/wiki/Voronoi_diagram