![]() |
![]() ![]() |
![]() |
![]()
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? |
|
|
![]()
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) |
|
|
![]()
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ą... |
|
|
![]()
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: 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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 14:19 |