2016-08-23 18 views
13

Chcę zintegrować publiczny czat w mojej aplikacji, ale nie mam pojęcia, jak utworzyć backend.Publiczny pokój rozmów z promieniem za pomocą Firebase (Sugerowane żądania)

Używam firebase do mojej aplikacji, a konfiguracja jest prosta między dwoma użytkownikami lub grupą użytkowników. Tworzę prywatny pokój oparty na punkcie referencyjnym w Firebase, który umożliwia użytkownikom z tej grupy dostęp do wiadomości.

Teraz, powiedzmy, że jestem w LA, chcę, aby użytkownicy mogli czatować z innymi użytkownikami znajdującymi się w promieniu 1 mil od ich lokalizacji (lat/lng). Wiem, że jest to możliwe, ponieważ istnieje taka aplikacja, która można znaleźć pod adresem https://itunes.apple.com/sg/app/popcorn-messaging/id718416705?mt=8.

Przeczytaj tylko następujące informacje, jeśli chcesz wiedzieć, co próbowałem. Może to być nieco mylące.

Jednym ze sposobów, w jaki o tym pomyślałem, jest stworzenie pokoju rozmów na całym świecie z milami. Na przykład zacznij od łaci: 0, lng: 0, a następnie przesuń milę w prawo, potem kolejną milę w prawo itd., Ale to przynosi więcej szkody niż pożytku. Będę miał miliony chatroomów i nie wszystkie będą używane.

Drugi sposób, który myślałem, że mogę zaimplementować, to stworzyć czat, jeśli nie istnieje w promieniu użytkownika. Więc jeśli jestem w LA i nie ma chatroomów, utworzy się jeden w tym miejscu i powiedzą, że jeśli inna osoba pojedzie do LA, ponieważ chatroom został już utworzony w lokalizacji 1 mile, to załaduje chatroom dla tego użytkownika .

Wszelkie sugestie będą bardzo mile widziane.

Odpowiedz

5

Jeśli masz pewność, że chcesz mieć 1 milę na 1 mili lub jakąkolwiek ustawioną odległość, myślę, że preferowane są wstępnie zdefiniowane pokoje rozmów na całym świecie z milami. Będzie to znacznie prostsze, jeśli chodzi o dodawanie nowych użytkowników i unikanie nakładania się, gdy ludzie będą przenosić lokalizacje. Jeśli korzystasz z bazy Firebase, a Twoje dane są spłaszczone prawidłowo, nie zaszkodzisz sobie zbytnio, mając puste pokoje.

Jedynym powodem, dla którego może tego nie robić, jest obawa, że ​​czaty staną się zbyt pełne lub zbyt puste. Nie jestem pewien, czy to jest problem dla twojej aplikacji, ale z pewnością byłaby to wada posiadania wstępnie zdefiniowanych lokalizacji. Nawet wtedy możesz użyć predefiniowanych lokalizacji i skalować (oddzielając pokoje) lub zwiększać skalę (łączenie pokoi razem) w oparciu o liczbę osób w pokojach.

Mam nadzieję, że to pomoże. Jeśli szukasz więcej wskazówek, czy możesz powiedzieć nam coś więcej o swojej aplikacji?

AKTUALIZACJA: Widzę, co mówisz. Po dalszych myślach nadal uważam, że z góry ustalone obszary byłyby najlepszą drogą. Nawet jeśli spontanicznie stworzysz nowe obszary, nadal będzie punkt, w którym będziesz musiał rozbijać pokoje (narysować granice między pokojami) i użytkowników po obu stronach tej linii, nawet jeśli znajdują się tuż obok siebie, w różnych pokojach.

Jeśli opiera się tylko na lat/lng i promieniu wokół tych użytkowników, może to również skutkować wynikami nieparzystymi. Na przykład, jeśli Użytkownik B znajduje się w pokoju z użytkownikiem A i C, ale użytkownicy A i C są zbyt daleko od siebie, mogą zobaczyć bardzo dziwne wiadomości na czacie. Na przykład, jeśli promień ten wynosił 1 milę, to User A może być pod adresem Mile 0, User B może znajdować się pod adresem Mile 1, a User C może znajdować się pod adresem Mile 2.Więc User A (który można zobaczyć tylko User A i User C) `chat mógłby wyglądać następująco:

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

Aby User B (który jest jedynym, który będzie zobaczyć wszystkie wiadomości) mógłby wyglądać następująco:

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?!?! 

Aby User C (który można zobaczyć tylko User B i User C) mógłby wyglądać następująco:

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

Wygląda na to, że to szybko wymknie się spod kontroli. Po tym wszystkim myślę, że moja pierwotna sugestia jest wciąż najlepsza, ale myślę, że wszyscy będą mieli wyzwania. Powodzenia!

+0

oznaczałoby to, że będę musiał ustawić go do statycznego odległości od początku. Załóżmy, że podzielę wszystkie pokoje rozmów na 1 x 1 milę. USER_A znajduje się 2 bloki od USER_B, mogą one znajdować się w tym samym pokoju rozmów sieciowych lub nie (w zależności od siatki). Wolałbym, żeby było w stosunku do lokalizacji użytkowników. Nie jestem też zbytnio zainteresowany statycznymi pokojami 1 x 1 mila. Gdybym miał zmienić promień, w którym pokoje są widoczne, musiałbym stworzyć całkiem nowy zestaw pokoi. Staje się zbyt brudny i nie jest skalowalny. Może nadają wiadomości w jednym pokoju, a wszyscy w promieniu 1 mila otrzymają go? –

+0

Nieco więcej o mojej aplikacji: chcę po prostu stworzyć aplikację, w której użytkownicy mogą anonimowo rozmawiać z innymi (ACTIVE) użytkownikami, jeśli znajdują się w określonym promieniu. Tak, muszą być aktywne, aby zobaczyć rozmowę. Jeśli A widzisz B, to B także widzi A. Myślę o jednym dużym czacie i umieszczeniu latka/lng na każdej wiadomości. Podczas pobierania wiadomości pobierać tylko te, które są w pewnym promieniu? –

+0

Zaktualizowałem. Mam nadzieję, że te aktualizacje pomogą wyjaśnić wyzwania. Wydaje się jednak fajnym wyzwaniem. Powodzenia! –

1

zrobiłbym to tak:

koncepcyjnej czacie jest lista użytkowników.

To, co możesz zrobić, to obliczyć "chat room" dla każdego użytkownika, gdy się on/ona zaloguje. Jak wskazuje @Luke, będziesz mieć pewne granice dla geo-promienia i minimalnej/maksymalnej liczby użytkowników, których zwrócisz.

Te tak zwane czatów (które są faktycznie wykazy pobliskich użytkowników) mogą być buforowane na podstawie jakiegoś podpisu użytkownika (IP + kliencka)

Jest trochę złożoność i są tam pokoje zachodzące na siebie, ale dbasz tego przy każdym logowaniu, dokonując rekompensacji w oparciu o to, kto jest online, gdy przybywa nowy użytkownik.

Można ograniczyć obliczenia tj dostać użytkownikom ponad promieniu 300 a następnie obliczyć bliskość w promieniu 100

inne podejście: można zbudować diagram woronoja z użytkownikami i obecnych sąsiednimi strefami dla danego jak użytkownicy czatów sąsiadów

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