Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Notyfikacje dla użytkowników
Boshi
post
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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
NickOver
post
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ć.
Go to the top of the page
+Quote Post
LowiczakPL
post
Post #3





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----



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
Go to the top of the page
+Quote Post
Boshi
post
Post #4





Grupa: Zarejestrowani
Postów: 342
Pomógł: 15
Dołączył: 30.08.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
LowiczakPL
post
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


  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ą.


Ten post edytował LowiczakPL 11.06.2016, 17:17:46
Go to the top of the page
+Quote Post
com
post
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.
Go to the top of the page
+Quote Post
Pyton_000
post
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)
Go to the top of the page
+Quote Post
Boshi
post
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)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 13:10