Trwałe połączenie z bazą

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: Trwałe połączenie z bazą

Post autor: wixor »

Indianin potrafi obsługiwać wiele żądań wielowątkowo, a już php łączy te wątki w jedną całość. zauważ, że przy php skompilowanym modułowo nie jest tworzonych wiele kopii modułu dla każdego z watków, a tylko odpowiednie funkcje są wywoływane z różnych wątków, zatem PHP utrzymuje wewntrzy licznik połączeń do którego mają dostęp wszystkie skrypty aktualnie wykonywane. przy kompilacji standalone jest ciut gorzej.... php po prostu pamięta, że jest takie a takie połączenie, a już gdy wywołuje się (z innego wątku) funkcja rozpoczynająca wykonanie skryptu, on patrzy sobie co tam w pamięci naskrobał i widzi, że połączenie już jest. Zatem, można kożystać z jednego połączenia wielowątkowo. (proponuje zrobić test - skrypt A robi jednego query-a, czeka n sekund i robi drugiego query-a, a w tym samym czasie odpala się phpmyadmin - na pewno nie nastąpi zablokowanie odpalającego się admina, które nastąpiłoby, gdyby php czekało aż skrypt A zakończy kożystanie z połączenia).
the_foe
Przelotem
Przelotem
Posty: 295
Rejestracja: pt sty 31, 2003 12:53 pm
Lokalizacja: Wałbrzych
Kontakt:

Re: Trwałe połączenie z bazą

Post autor: the_foe »

wixor pisze:Indianin potrafi obsługiwać wiele żądań wielowątkowo, a już php łączy te wątki w jedną całość. zauważ, że przy php skompilowanym modułowo nie jest tworzonych wiele kopii modułu dla każdego z watków, a tylko odpowiednie funkcje są wywoływane z różnych wątków, zatem PHP utrzymuje wewntrzy licznik połączeń do którego mają dostęp wszystkie skrypty aktualnie wykonywane. przy kompilacji standalone jest ciut gorzej.... php po prostu pamięta, że jest takie a takie połączenie, a już gdy wywołuje się (z innego wątku) funkcja rozpoczynająca wykonanie skryptu, on patrzy sobie co tam w pamięci naskrobał i widzi, że połączenie już jest. Zatem, można kożystać z jednego połączenia wielowątkowo. (proponuje zrobić test - skrypt A robi jednego query-a, czeka n sekund i robi drugiego query-a, a w tym samym czasie odpala się phpmyadmin - na pewno nie nastąpi zablokowanie odpalającego się admina, które nastąpiłoby, gdyby php czekało aż skrypt A zakończy kożystanie z połączenia).
ja bym to raczej nazwal wieloprocerowościa. Apache potrafi utrzymac wiele, niech juz bedzie, watkow (procesow), ale nie slyszalem, zeby potrafil przekazywac wyniki miedzy procesami. Inaczej mowiac kiedy dwoch klientow poprosi o to samo serwer zamiast skopiowac proces powtorzy go dwa razy.
Apache nei nadaje sie do profesjonalnych zastosowan, jesli ktos chce cos zrobic duzego na PHP instaluje go pod IIS. Nie wyobrazam sobie serwera ktory by udzwignal dajmy na to onet.pl pod Apache.
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: Trwałe połączenie z bazą

Post autor: wixor »

on, owszem tworzy noew procesy i nie przekazuje wyników między nimi - php to załatwia - zauważ, że to tak właściwie są wątki (chociaż na linuxie to bez różnicy) - one mają tą samą przestrzeń adresową. czyli zmienne jednego wątku są dostępne dla drugiego. i ten sposób, kopiowanie danych między wątkami... przestaje istnieć - wszystkie dane są widoczne dla wszystkich.
JaroW
Posty: 5
Rejestracja: wt paź 05, 2004 9:28 am
Lokalizacja: Łódź

Re: Trwałe połączenie z bazą

Post autor: JaroW »

Z zaciekawieniem czytam wszystkie uwagi ale wydaje mi sie, że odpowiedzi na nurtujące mnie pytanie nadal nie znam.
Może jeszcze raz trochę inaczej!
Kiedy i w jaki sposób jest zamykane trwałe połączenie z bazą utworzone funkcją mysql_pconnect()? No bo w jakiś sposów chyba jest jednak zamykane?
wixor
Przelotem
Przelotem
Posty: 336
Rejestracja: śr gru 31, 2003 10:18 pm
Lokalizacja: Wrocław

Re: Trwałe połączenie z bazą

Post autor: wixor »

oj, chyba jednak nie.......
nie czytasz wystarczająco uważnie.
Stig
Administrator
Posty: 938
Rejestracja: pn paź 04, 2004 10:52 am

Re: Trwałe połączenie z bazą

Post autor: Stig »

JaroW pisze:Kiedy i w jaki sposób jest zamykane trwałe połączenie z bazą utworzone funkcją mysql_pconnect()? No bo w jakiś sposów chyba jest jednak zamykane?
Połączenie stałe nie jest zamykane. Nie da się tego zrobić za pomocą funkcji mysql_close() oraz w żaden inny sposób. To jest właśnie zaleta połączenia stałego - nigdy nie zostaje zerwane!
JaroW
Posty: 5
Rejestracja: wt paź 05, 2004 9:28 am
Lokalizacja: Łódź

Re: Trwałe połączenie z bazą

Post autor: JaroW »

OK. Połączenie trwałe nigdy nie jest zamykane. Ale na jakiej podstawie następuje wykorzystanie już ustanowionego połączenia a kiedy zostanie utworzone nowe?
Jest taki kod:

Kod: Zaznacz cały

...
$link=mysql_pconnect($host,$user,$password);
mysql_select_db($basename,$link);
mysql_query($sql,$link);
...
Czy tylko odświeżając taką stronę powinna ona korzystać z raz ustanowionego połączenia?
Od razu wyjaśnię, że u mnie niestety tak to nie działa. Wydaje się, że w sposób losowy, kilka razy wykorzysta połączenie już istniejące a potem utworzy sobie nowe. A stare wisi i po jakimś czasie serwer się zatyka.
Stig
Administrator
Posty: 938
Rejestracja: pn paź 04, 2004 10:52 am

Re: Trwałe połączenie z bazą

Post autor: Stig »

JaroW pisze:OK. Połączenie trwałe nigdy nie jest zamykane. Ale na jakiej podstawie następuje wykorzystanie już ustanowionego połączenia a kiedy zostanie utworzone nowe?
Jest taki kod:

Kod: Zaznacz cały

...
$link=mysql_pconnect($host,$user,$password);
mysql_select_db($basename,$link);
mysql_query($sql,$link);
...
Czy tylko odświeżając taką stronę powinna ona korzystać z raz ustanowionego połączenia?
Od razu wyjaśnię, że u mnie niestety tak to nie działa. Wydaje się, że w sposób losowy, kilka razy wykorzysta połączenie już istniejące a potem utworzy sobie nowe. A stare wisi i po jakimś czasie serwer się zatyka.
Przeczytaj uważnie wszystkie posty. Wynika z nich, w sposób jasny, że problem stoi po stronie serwera... Nie ma tak, że sobie losuje ile razy skorzysta z istniejącego stałego połączenia i kiedy utworzy nowe. Napiszę jeszcze raz: przeczytaj uważnie(!!!) wszystkie posty - tam masz dokładnie wyjaśnione![/b]
ODPOWIEDZ