Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Socket server i sesje
Forum PHP.pl > Forum > PHP
CuteOne
Edit: rozwiazane
greycoffey
Hej, może napisałbyś problem i jak to rozwiązać, skoro już Ci się udało? smile.gif
webdice
Prawie 2000 postów i nie wiesz jakie zasady tu panują?
CuteOne
@webdice
III. Prawa i obowiązki.
f. Użytkownicy mogą edytować własne, wysłane już posty, oraz kasować je o ile nikt na nie jeszcze nie odpisał.

@greycoffey

Tworzę socket serwer na własne potrzeby. Jego zadaniem jest zaincludowanie całej aplikacji (w ten sposób nie trzeba przy każdym requeście includować tych samych plików, łączyć się z bazą itp. itd.). Problemem było przekazywanie sesji pomiędzy klientem a serwerem.

- jeżeli sesje były by zapisywane po stronie serwera to w jaki sposób połączyć je z klientem?
- jeżeli sesje były by zapisywane po stronie klienta to w jaki sposób przekazać je do serwera?

Na pierwsze pytanie nie znalazłem odpowiedzi - niby można podczepić socket klienta pod sesje ale przy dużej ilości użytkowników takie rozwiązanie mija się z celem. Powstała by jedna wielka sesja dla wszystkich użytkowników

Na drugie pytanie rozwiązanie było dość banalne smile.gif

  1. $stream = fsockopen('localhost', 9000, $errno, $errstr, 30);
  2. $array = array(
  3. 'get'=>$_GET,
  4. 'post'=>$_POST,
  5. 'session'=>$_SESSION
  6. );
  7. $cmd = json_encode($array);
  8.  
  9. fwrite($stream, $cmd);


a po stronie serwera obsługujemy wysłaną od klienta sesję.

Na tą chwilę wszystko działa jak należy zostało mi tylko zabezpieczenie serwera przed memory leaks ale to już inna bajka
hind
@CuteOne: Serwer masz w PHP? Czy w czym innym?
Jeśli PHP to jak z wydajnością?
CuteOne
Serwer pisany w PHP. Co do wydajności wiadomo nie jest to python ale nie ma tragedii ba powiedział bym nawet, że widać odczuwalny dla użytkownika wzrost wydajności.

To co robi serwer:
- tworzy socket'a
- includuje pliki aplikacji, łączy się z bazą
- oczekuje na połączenie od klienta
- gdy następuje połączenie autoryzuje użytkownika (sesje)
- i generuje dla niego stronę www (routing + GET/POST)
- w tym momencie mam dylemat czy wygenerowaną stronę zapisać do pliku i jego nazwę przekazać do klienta aby ten wyświetlił go użytkownikowi. a może lepszym rozwiązaniem będzie przekazanie strony przez sockety (wyjdzie w testach, która opcja jest lepsza)
- następuje zerwanie połączenia i wyświetlenie strony po stronie klienta.

Od teraz lotto mi ile obiektów będzie zawierała moja aplikacja i jak tragiczny wydajnościowo jest autoloader (wszystkie pliki includowane są zaraz po starcie serwera), oczywiście nadal wąskim gardłem pozostaje baza danych ale i na to mam pomysł wink.gif

edit:
dodam jeszcze, że poza plikami .php do aplikacji wgrywane są też wszystkie aktualne pliki cache bez względu na to czy są czy nie są wymagane
hind
Ja nażekam na fatalną wydajność bazy, z tym że do problemu podeszłem inaczej. Zamiast łączyć się z soketem, wyliczam dane w cronie czy innym demonie i gotowe listingi zapisuje w mysqlu.
Twój serwer PHP obsługuje wątki (pcntl czy coś innego)? czy po prostu masz tylko obsługę dla wielu połączeń (stream_select)?
Co do pisania tego w pythonie/jythonie/javy, to nie uśmiecha mi się przepisywać całej logiki z php do innego języka.

Oraz masz jakoś rozwiązane problemy w stylu, że przypadkowo serwer Ci zdechnie (ja u siebie uruchamiam proces który dopiero uruchamia prawidłowego demona i nadzoruje czy przypadkiem się nie wywalił. jak się wywala, restart i mail)
CuteOne
Na razie testuje na windowsie ale tu zamiast pseudo wątków pcntl_* (php nie ma wątków ;P) używam Temat: PHPWindows Deamony pod Windowsem wink.gif Gdy przejdę na linuxa to oczywiście forkowanie za pomocą wcześniej wspomnianego pcntl_*.

Co do zabezpieczeń przed zdechnięciem serwera - odpalam równolegle drugiego demonka, który co parę sekund łączy się z serwerem, gdy nie może się połączyć odpala go.
webdice
Cytat(CuteOne @ 22.07.2012, 00:48:01 ) *
@webdice
III. Prawa i obowiązki.
f. Użytkownicy mogą edytować własne, wysłane już posty, oraz kasować je o ile nikt na nie jeszcze nie odpisał.


Posty, nie tematy. Po usunięciu pojedynczego posta nie ma śladu, a co za tym idzie problemu. Po usunięciu treści postu temat jest nadal indeksowany przez wyszukiwarki, a jest bezwartościowy.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.