Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Chat na WeSocket i zapisywanie Historii wiadomości
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
adbacz
Mam serwer do Chatu oparty na WebSocket na node.js (pisany ręcznie). I będzie on wykorzystywany w aplikacji zainstalowanej na zupełnie innym serwerze. Ta aplikacja ma napisanego klienta do tego Chatu (również ręcznie). Chciałem by to było w miarę bezpieczne, więc nie chcę zapisywać, żadnych wiadomości na tym serwerze Chatu. Ale jakaś historia musi być rozmów, więc myślę nad tym, by zapisywać ją na serwerze lokalnym, tam gdzie jest zainstalowana aplikacja.

Jednak zastanawia mnie kiedy (w którym momencie) zapisywać te wiadomości i jak często? Nie mogę robić żądania do aplikacji za każdym razem gdy wiadomość przyjdzie lub zostanie wysłana, bo to jest nad wyrost. Z drugiej strony nie mogę robić żądania zapisania co 10 minut, bo jeśli 9 minut po ostatnim żądaniu, ktoś coś napisze i wyłączy aplikację (przeglądarkę) to te wiadomości sprzed 9 minut się nie zapiszą.

Pytanie więc postawione wcześniej, kiedy i jak często zapisywać te wiadomości?
Crozin
Cytat
Chciałem by to było w miarę bezpieczne, więc nie chcę zapisywać, żadnych wiadomości na tym serwerze Chatu.
Dlaczego miałoby to być niebezpieczne?
Cytat
Ale jakaś historia musi być rozmów, więc myślę nad tym, by zapisywać ją na serwerze lokalnym, tam gdzie jest zainstalowana aplikacja.
W takim wypadku Twój względnie "prosty" klient zaczyna się stawać "pół-serwerem" bo zapewne poza historią przerzucisz na niego kolejne zadania.
Cytat
Jednak zastanawia mnie kiedy (w którym momencie) zapisywać te wiadomości i jak często?
Natychmiastowo? I tak Twój serwer/klient odbiera/wysyła te wiadomości nieustanie, to jakim problemem jest przy okazji zapisywać je w BD?
adbacz
Cytat
Dlaczego miałoby to być niebezpieczne?

Nie wiadomo kto co będzie wysyłał czatem, nie chciałbym tego przechowywać na swoim serwerze.
Cytat
W takim wypadku Twój względnie "prosty" klient zaczyna się stawać "pół-serwerem" bo zapewne poza historią przerzucisz na niego kolejne zadania.

Co masz na myśli pisząc pół-serwer? On i tak aplikację będzie miał na swoim serwerze.
Cytat
Natychmiastowo? I tak Twój serwer/klient odbiera/wysyła te wiadomości nieustanie, to jakim problemem jest przy okazji zapisywać je w BD?

Z góry założenie jest takie, żeby nie zapisywać tego na serwerze obsługującym chat - więc zostaje serwer na którym jest postawiona aplikacja. A WebSocket łączy się z serwerem Chatu bezpośrednio, więc niedosyć, że musiałbym wysyłać wiadomości poprzez WebSocket, to jeszcze dla każdej wiadomości musiałbym robić request to aplikacji na serwerze klienta, by mi zapisała wiadomość.

Chciałbym to jakoś zoptymalizować, by nie robić za każdym razem requestu gdy przyjdzie wiadomość. Ale jak to można wykonać bardziej "przyjemnie" dla serwera?
Damonsson
Ja Ci powiem jak ja to robię wydajnie dla ogromnej ilości użytkowników.

Każdą wiadomość przy publikacji (po stronie serwera) zapisuję do Redisa (może być na zupełnie innym serwerze), co noc CRONem zrzucam wiadomości z całego dnia oprócz 1000 ostatnich, z Redisa do logów (MongoDB, zwykłe pliki tekstowe, MySQL czy cokolwiek innego co wybierzesz, może być Twoimi logami)

Jak masz tych wiadomości mniej niż powiedzmy 1000 na dzień to wiadomo, że możesz sobie to trzymać dłużej w Redisie niż 1 dzień, np. zrzucać dopiero po przekroczeniu 1000 wiadomości. Co by użytkownicy po podłączeniu do czatu mieli jego historię.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.