Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Socket server i sesje
CuteOne
post
Post #1





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Edit: rozwiazane

Ten post edytował CuteOne 18.07.2012, 02:32:27
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
greycoffey
post
Post #2





Grupa: Zarejestrowani
Postów: 320
Pomógł: 29
Dołączył: 3.04.2010

Ostrzeżenie: (20%)
X----


Hej, może napisałbyś problem i jak to rozwiązać, skoro już Ci się udało? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
webdice
post
Post #3


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Prawie 2000 postów i nie wiesz jakie zasady tu panują?
Go to the top of the page
+Quote Post
CuteOne
post
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


@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 (IMG:style_emoticons/default/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

Ten post edytował CuteOne 22.07.2012, 05:03:21
Go to the top of the page
+Quote Post
hind
post
Post #5





Grupa: Zarejestrowani
Postów: 142
Pomógł: 24
Dołączył: 30.03.2009
Skąd: Rokitno Szlacheckie

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


@CuteOne: Serwer masz w PHP? Czy w czym innym?
Jeśli PHP to jak z wydajnością?

Ten post edytował hind 22.07.2012, 15:48:50
Go to the top of the page
+Quote Post
CuteOne
post
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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ł (IMG:style_emoticons/default/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

Ten post edytował CuteOne 22.07.2012, 17:26:15
Go to the top of the page
+Quote Post
hind
post
Post #7





Grupa: Zarejestrowani
Postów: 142
Pomógł: 24
Dołączył: 30.03.2009
Skąd: Rokitno Szlacheckie

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


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)
Go to the top of the page
+Quote Post
CuteOne
post
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
webdice
post
Post #9


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




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.
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: 22.08.2025 - 21:59