Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Sesje, sleep() i blokowanie kolejnego połączenia
Prph
post
Post #1





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


Witam!

Posiadam 2 pliki, w każdym startuje sesja. Jeżeli w dowolnym z plików zrobię sleep(10), to z kolejnym nie mogę się połączyć. Połączenie wisi do zakończenia sleep() i dopiero jest realizowane.

Sprawdzałem na różne sposoby i efekt ten sam przy sesjach. Jeżeli jeden z plików nie ma sesji, to połączenie jest realizowane natychmiast.

Do czego mi to? Załóżmy, że mam w pierwszym pliku while(flaga sesji == true) {zrob_cos(); sleep(10); }, a w drugim po prostu zmieniam flagę, żeby przerwać pętle w pierwszym. Może istnieje inny sposób na rozwiązanie tego problemu?
Go to the top of the page
+Quote Post
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://forum.php.pl/index.php?showtopic=14...mp;#entry732218
Jak przeczytasz wszystko, dostaniesz odpowiedź (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
zegarek84
post
Post #3





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

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


dokładniej to sesja jest blokowana gdyż domyślnie sesja jest oparta na plikach... nie zapiszesz sesji puki pierwsza nie uwolni uchwytu... musiałbyś napisać własnego handlera sesji i najlepiej to oprzeć o bazę danych... a coby nie robić tak, że co odczyt zmiennej by nie łączyć się z bazą danych to lepiej w sesji zrób uchwyt do innej tabeli w bazie danych i zmiennej... w drugim pliku zmienisz wartość rekordu o danym id a w pierwszym co jakiś czas będziesz sprawdzał wartość ale bezpośrednio w bazie...

jeśli nie zrozumiałeś to co napisałem to prosty test - podepnij do zapisu [zablokuj dostęp] jakiś plik tekstowy i daj sleep na te 10s... w między czasie spróbuj innym zmienić zawartość pliku gdzie już pierwszy niby zaczął a nie skończył... efekt będzie taki jak teraz masz z sesją...
Go to the top of the page
+Quote Post
Prph
post
Post #4





Grupa: Zarejestrowani
Postów: 338
Pomógł: 2
Dołączył: 4.03.2006
Skąd: Łódź

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


Zgadza się, to sesja jest blokowana i stąd problem.

Czy da się rozwiązać ten problem za pomocą sesji składowanych we współdzielonej pamięci? Włączałem memcache dla składowania sesji, ale efekt jest ten sam.

Idealne byłoby rozwiązanie:
  1.  
  2. echo 'dane';
  3. sleep(1);
  4.  


O ile write_close natychmiast zwalnia dostęp do sesji i można wykonać kolejne połączenie, sesja nie wstaje ponownie z powodu wysłanych danych przez nagłówkami.

Sesje są mi potrzebne (przynajmniej tak mi się teraz wydaje)...

EDIT: właśnie włączyłem handler zapisujący w bazie w Zend Framework i problem blokowania znika. Teraz wystarczy przeładować zawartość sesji.

Ten post edytował Prph 7.05.2010, 16:00:46
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: 23.08.2025 - 14:19