Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PubSub
kpt_lucek
post
Post #1





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

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


Witajcie

Borykam się z pewnym problemem, mam przygotowany mechanizm PubSub (Websocket).

Opierając się o autobahn napisałem chat od strony klienta, a gosws serwer.

To z czym mam problem, bądź mi nie pasuje:
1) Serwer umiera przy dużej liczbie połączeń, cron "lata" co minutę i stara się reanimować, co w efekcie powoduje kolejne padnięcie trupem,
2) Tym mogę wyciągnąć usera, a co za tym idzie - podczas requesta, poza danymi leci również ciastko (imo nie powinno, nie do tego jest pub&sub nie?),
3) Alternatywa crossbar działa fajnie, 20k requestów/s nawet nie gryzie, aczkolwiek nie ma sharowania ciastek (przynajmniej na tym etapie dokumentacji na którym jestem, ale to nie istnotne), a poza tym i tak potrzebuję subscriber'a i publisher'a od strony php, co za tym idzie, sytuacja bardzo podobna do 1, mianowicie - dużo requestów, apka pada.

to co chcę uzyskać, to względnie wydajne narzędzie, bazujące na czymś co (najlepiej) już jest (chociażby wspomniany crossbar), możliwość względnie bezawaryjnego "słuchania" i "nadawania" do dowolnego użytkownika/grupy użytkowników na kanale, szyfrowanie to swoją drogą. Można by zapewne autoryzować użytkownika po tokenie dołączonym do payload'u, ale tutaj security fkup (tak, wiem że podwędzenie użytkownika i hasła do komputera też może się "stać").



Jakieś sugestie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Damonsson
post
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Hmmm dziwne problemy. Sockety obsługiwane przez PHP na najtańszym dedyku z 1gb ram powinno spokojnie ogarnąć MILIONY połączeń. Podsumowując, coś robicie źle.
Ad 1) Nie podoba się pętla w PHP? Jest libevent.
Ad 2) Nie podoba się taka obsługa sesji? Nie używaj (IMG:style_emoticons/default/wink.gif)
Ad 3) Nie wierzę, że 20k zabija serwer, musisz robić tam coś jeszcze dziwnego.

Autoryzację użytkownika masz rozwiązaną po cookies, musisz tylko sesję obsługiwać np. w Redisie, ja osobiście tak robię i działa super, kolega by_ikar, widzę też coś takiego sobie pisze. Opis jak to zrobić, masz w dokumentacji GOSWebSocketBundle albo Ratchet.

Osobiście używam, a żeby było śmieszniej rozwijam projekt GOSWebSocketBundle, więc znam go od podszewki i działa pięknie dla milionów requestów na tanich dedykach, testowane wielokrotnie benchmarkami. Jeżeli nie piszesz w Symfony to nie potrzebny Ci GOSWebSocketBundle, wystarczy sam Ratchet, z którego korzysta GOSWebSocketBundle.

Podsumowując szukałbym przyczyny po stronie serwera, lub dziwnej implementacji websocketów. Nie wierzysz, postaw sobie gołe demo GOSWebSocketBundle i zapuść jakiś benchmark, tam w dokumentacji powinien być gdzieś przykład użycia, zobaczysz, że to działa dla dużych liczb i nic się nie wywala.

Ten post edytował Damonsson 4.11.2015, 01:51:47
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Cytat(Damonsson @ 4.11.2015, 02:51:09 ) *
Hmmm dziwne problemy. Sockety obsługiwane przez PHP na najtańszym dedyku z 1gb ram powinno spokojnie ogarnąć MILIONY połączeń. Podsumowując, coś robicie źle.


Utrzymanie miliona połączeń to dość akademickie podejście, wystarczy do takiego miliona połączeń wysłać jednego emita z playloadem 1kb i już takiej maszynie nie wystarczy pamięci na przetworzenie takiej ilości danych. Nie mówiąc już o łączu, bo przecież będzie to wysłanie prawie 1gb danych, w sekundę też się to nie wyślę. Więc hmm, takie pisanie o ogarnianiu milionów połączeń jest dość na wyrost, bo w praktyce wygląda to zupełnie inaczej.
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.12.2025 - 16:39