Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Notyfikacje dla użytkowników
Forum PHP.pl > Forum > PHP
Boshi
Cześć, piszę w tym dziale, bo w sumie tyczy się to głownie php, ale podejrzewam, że pasował by jeszcze to 4-5 innych działów. Do rzeczy.
Potrzebuje na stronie zrobić notyfikacje dla użytkowników gdy coś się w bazie zmieni. Tyle, że nie mam pojęcia które rozwiązanie będzie optymalne i najlepsze oraz czy Symfony 3 ma jakiś sprawdzony bundle pod tym kątem.


1 rozwiązanie:
odświeżanie strony ajaxem co np 5 sekund. Problemem staje się wydajność

2 Web socety, tutaj generalnie moja wiedza się kończy jeżeli chodzi o te sprawy i nie wiem czy się w to zagłębiać jakoś specjalnie.

Doradzi ktoś ciekawe rozwiązanie i nie wymagające miesięcznej nauki ?
NickOver
Najlepszym rozwiązaniem będą websockety. Jeśli jest mało userow to te pehapowe, jeśli duzo serwer postawiony na modę.js (php nie radzi sobie z wieloma socketami). A co do wiedzy wpisz w Google websockety chat php i znajdziesz informacje jak to powinno wyglądać.
LowiczakPL

Cytat(Boshi @ 11.06.2016, 01:06:21 ) *
1 rozwiązanie:
odświeżanie strony ajaxem co np 5 sekund. Problemem staje się wydajność


Co ma wspólnego odpytanie serwera z wydajnością, to kwestia requestów, które i tak generujesz podczas wczytywania obrazków czy CSSów, połączysz 3 CSSy w 1 plik to zaoszczędzisz requesty.

Znasz się na Ajaxie to zastosuj ajaxa ale w ten sposób że po stronie serwera skrypt nie odpytuje bazy ale sprawdza czy istnieje PUSTY PLIK i pobiera jego datę.

Jeśli pusty plik istnieje znaczy się masz w bazie nowe wiadomości do zaserwowania użytkownikowi, więc procedura serwowania może się rozpocząć.

Po stronie przeglądarki zapisuj ostatnią datę wiadomości.

1. CRON tworzy pusty plik z datą/godziną wiadomości
2. AJAX sprawdza datę ostatniej wiadomości z DATĄ pobraną z serwera, jeśli jest inna to zaciąga wiadomości od ostatniej daty/godziny
Boshi
Cytat(LowiczakPL @ 11.06.2016, 11:50:11 ) *
Co ma wspólnego odpytanie serwera z wydajnością, to kwestia requestów, które i tak generujesz podczas wczytywania obrazków czy CSSów, połączysz 3 CSSy w 1 plik to zaoszczędzisz requesty.

Znasz się na Ajaxie to zastosuj ajaxa ale w ten sposób że po stronie serwera skrypt nie odpytuje bazy ale sprawdza czy istnieje PUSTY PLIK i pobiera jego datę.

Jeśli pusty plik istnieje znaczy się masz w bazie nowe wiadomości do zaserwowania użytkownikowi, więc procedura serwowania może się rozpocząć.

Po stronie przeglądarki zapisuj ostatnią datę wiadomości.

1. CRON tworzy pusty plik z datą/godziną wiadomości
2. AJAX sprawdza datę ostatniej wiadomości z DATĄ pobraną z serwera, jeśli jest inna to zaciąga wiadomości od ostatniej daty/godziny



Mój pomysł opierał się o funkcję bodajże setInterval i w niej wysyłanie requestów co np 5 sekund do bazy i pobranie lub nie nowych danych.

Zaciekawił mnie twój pomysł, Mógłbyś to jakoś, nie wiem, pseudokodem pokazać bo nie bardzo rozumiem ideę tego pustego pliku.
LowiczakPL
Po stronie przeglądarki generujesz stronę dla usera i podczas generowania zapisujesz sobie datę ostatniego NEWSA

var lastNewsDate = 1463076213;

AJAX co jakiś czas łączy się z Twoim plikiem na serwerze czysaposty.php i pobiera lastNewsDate

plik czysaposty.php zawiera kod wyświetlający datę pliku


  1. <?php
  2. $filename = 'czysaposty.txt';
  3. if (file_exists($filename)) {
  4. echo filectime($filename);
  5. }
  6.  
  7. ?>
  8.  


AJAX porównuje lastNewsDate z pobraną datą z serwera jeśli jest inna znaczy się można pytać inny plik pobierający dane, jelsi ta sama to nic nie robi.

W pliku pobierającym dane masz już połączenie z baza danych albo i nie, bo też możesz pobierać dane z pliku textowego, który będzie wygenerowany raz na tysiąc pobrań.


PS. zapomniałem o CRONIE, albo o innym pliku, który nadpisze plik 'czysaposty.txt' w momencie kiedy faktycznie nowe posty się pojawią.
com
Jak nie chcesz pytać co chwile bazy to stawiasz redisa a nie robisz jakiś takich cudów, można też pomyśleć o pushu z serwera do klienta. Ile to operacji dyskowych będzie, a na tym flow nie wiele zyskasz.
Pyton_000
@LowiczakPL z tym plikiem to pojechałeś wink.gif Tak się robiło 100 lat temu.

Tak jak @com powiedział. Stawiasz Redisa (lub cokolwiek jako cache) i zapisujesz tam dane z BD. Potem tylko serwujesz te dane.
Ajax odpytujesz tak jak @LowiczakPL proponował z datą generowania strony i potem tyko pobierasz to co zostało zmienione od czasu wizyty (po każdym newsie możesz aktualizować ten czas co by nie duplikować wiadomości)
Boshi
Dzięki za podpowiedzi, wczytam się w wolnym czasie w Redisa wink.gif
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.