![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
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 ? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 332 Pomógł: 10 Dołączył: 13.03.2014 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
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ć.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 531 Pomógł: 55 Dołączył: 3.01.2016 Skąd: Łowicz Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 531 Pomógł: 55 Dołączył: 3.01.2016 Skąd: Łowicz Ostrzeżenie: (0%) ![]() ![]() |
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
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ą. Ten post edytował LowiczakPL 11.06.2016, 17:17:46 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 034 Pomógł: 366 Dołączył: 24.05.2012 Ostrzeżenie: (0%) ![]() ![]() |
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.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
@LowiczakPL z tym plikiem to pojechałeś (IMG:style_emoticons/default/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) |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za podpowiedzi, wczytam się w wolnym czasie w Redisa (IMG:style_emoticons/default/wink.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 13:10 |