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? |
|
|
|
![]() |
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 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław 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. 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. |
|
|
|
kpt_lucek PubSub 3.11.2015, 17:44:22
by_ikar Cóż, nie może wyjść nic dobrego z puszczenia php w... 3.11.2015, 22:48:13
kpt_lucek Hmm... przeglądałem socket.io, wyglądało dość... d... 3.11.2015, 23:32:22
kpt_lucek Cytat(Damonsson @ 4.11.2015, 01:51:09... 4.11.2015, 08:18:42 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 16:39 |