Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [inne] Odpowiedź HTTP bez żądania
ZaqU
post 11.10.2016, 19:40:37
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 1
Dołączył: 21.01.2013

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


Witam,

Mam pytanie odnośnie protokołu HTTP. Jak wszyscy wiedzą, działa on w taki sposób, iż na wysłane przez klienta żądanie HTTP serwer wysyła odpowiedź. Czy jest jednak możliwe, aby serwer wysyłał do klienta odpowiedzi automatycznie, bez żądań? Dobrym przykładem może być standardowy czat online (nigdy nie tworzyłem czatów więc nie wiem do końca na jakiej zasadzie działają). Chciałbym stworzyć coś takiego, ale nie wiem czy opisana przeze mnie metoda będzie optymalna. Moja koncepcja na działanie czatu w czasie rzeczywistym jest następująca:

- wszystkie rozmowy przechowywane są w bazie danych na serwerze
- jeżeli użytkownik wysyła wiadomość, wysyłane jest żądanie HTTP POST do serwera.
- dopóki użytkownik posiada otwartą w przeglądarce kartę z czatem, aplikacja ta wysyła co sekundę zapytanie HTTP GET do serwera z pytaniem czy są jakieś aktualizacje. Jeżeli są zmiany, podawane są w odpowiedzi zwrotnej, w innym przypadku odpowiedź ta jest pusta.

To rozwiązanie zapewnia, że czat będzie działał na bieżąco, ale punkt 3 jest ogromnym marnowaniem zasobów serwera, gdyż jeżeli przez jakiś okres czasu użytkownicy nie napiszą żadnej wiadomości i nie będzie czego aktualizować na czacie, to i tak do serwera zostanie wysłana ilość zapytań: [czas_w_sekundach] x [ilość_użytkowników], czyli dla 10 minut i 2 użytkowników będzie to aż 1200 zbędnych zapytań obciążających serwer. A co w sytuacji, gdy z czatu korzysta kilkadziesiąt osób? Albo, gdy czat funkcjonuje w kilku kartach jednocześnie? Powstaje duży problem!

Czy jest jakiś sposób na optymalizację tego procesu? Idealnie gdyby serwer sam wysyłał do klienta odpowiedź w czasie gdy pojawi się jakaś aktualizacja, a klient jedynie "nasłuchiwał" i ewentualnie co minutę wysyłał żądanie potwierdzające, że ciągle pozostaje w gotowości na odebranie nowych danych (zabezpieczenie przed wysyłaniem zbędnych danych przez serwer gdy karta ze stroną zostanie zamknięta przez użytkownika).

Nie wiem tylko czy takie coś jest możliwe, a jeżeli tak, to z wykorzystaniem jakiej technologii? Najprościej oczywiście!
Go to the top of the page
+Quote Post
Pyton_000
post 11.10.2016, 20:06:49
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nazywa się to Websocket
Go to the top of the page
+Quote Post
Skie
post 11.10.2016, 20:17:26
Post #3





Grupa: Zarejestrowani
Postów: 555
Pomógł: 84
Dołączył: 20.02.2008
Skąd: Małopolska

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


Tak jak pisze Pyton_000 to czego szukasz to websocket - tutaj przykład https://github.com/kraken-php/demo-chat smile.gif


--------------------
Wieloprocesowość i wielowątkowość w PHP, poznaj Kraken PHP!
Serwer HTTP i WebSocket w PHP | Promise/A+
Strona Domowa | Elradia MMORPG
FireFox: make the web better.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 23:35