![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 24.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
witam
Używam pewnego obiektu COM.
Utworzenie go i "otwarcie" zajmuje sporo czasu, a gdy przetwarzanie po stronie serwera dojdzie do końca uruchomiony zostaje destruktor i obiekt jest zamykany. Przy następnym przeładowaniu strony znów muszę tworzyć ten obiekt i go otwierać i znów zajmuje to sporo czasu. Próbowałem go serializować i przesyłać ( przesyła dokładnie >> O:3:"com":0:{} << ), ale zostaje zamykany ten obiekt i już nie można go dalej używać przy następnym przeładowaniu strony. Czy jest może jakiś patent na to? Dziękuję za wszelką pomoc i sugestie |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 508 Pomógł: 75 Dołączył: 2.11.2005 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Poczytaj o metodach __sleep() i __wakeup(). Są wywoływane odpowiednio przy serialize() i unserialize(). To jest na pewno to czego szukasz
![]() Ten post edytował franki01 24.09.2010, 20:48:55 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 231 Pomógł: 22 Dołączył: 6.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli potrzebujesz tego obiektu w obrębie tej samej sesji, to możesz po prostu zapisać go w $_SESSION, jeśli ten obiekt potrzebny jest ci powiedzmy za 3-4 dni to możesz go zapisać w pliku np txt używając serialize().
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 24.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za odpowiedzi.
Przepraszam, że dopiero teraz odpowiadam - już miałem zjazd na studiach. Właśnie zapisywanie do sesji ( $_SESSION ) nie udaje mi się. Tzn. coś tam zapisuje w tej zmiennej (dokładnie: >> O:3:"com":0:{} << ) ale nie mogę go użyć po przeładowaniu, ponieważ na końcu uruchamia się destruktor i on najprawdopodobniej zamyka obiekt, przez co trzeba go jeszcze raz otwierać. Już biorę się za czytanie o __sleep() i __wakeup() , i poinformuję o wynikach :-) edit: Ten obiekt COM-mowy nie jest chyba raczej dostosowany do używania go przez PHP I nie ma funkcji __sleep(int).
wynik: Call to undefined method com::__sleep() Czy mam go obudować w jakąś klasę i sam napisać metody __sleep() i __wakeup() ? Jeżeli tak - to nadal nie wiem jak zrobić, aby ten obiekt nie był zamykany między przeładowaniami, ponieważ to właśnie otwarcie tego obiektu zajmuje najwięcej czasu. A z tego co czytałem to metoda __sleep() zamyka obiekt a __wakeup() otwiera powtórnie. A otwarcie powtórne to jest to, czego chcę uniknąć. A można jakoś zrobić, aby destruktor nie był wywoływany na końcu strony, wcale nie był uruchamiany? Ten post edytował m10 27.09.2010, 08:03:54 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
więc skorzystaj z socket'ów - w jednym skrypcie otwórz połączenie i go nie zamykaj, nasłuchuj zapytania z innych skryptów i daj odpowiedź im [cała obsługa portu com w tym pierwszym skrypcie tylko...]
tu masz przykład też a i w google doczytaj więcej: http://php.net/manual/pl/function.socket-select.php#56241 A można jakoś zrobić, aby destruktor nie był wywoływany na końcu strony, wcale nie był uruchamiany? ignore_user_abort, set_time_limit(0), sleep i odpowiednia pętla by skrypt mógł ciągle działać z tym, że tak skonstruowana, by w razie potrzeby móc zakończyć proces z zewnątrz - więc coś na zewnątrz skryptu jeszcze musiałbyś sprawdzać.... na końcu działania skryptu w "normalnych warunkach" destruktor zawsze się uruchomi... Ten post edytował zegarek84 27.09.2010, 11:58:54 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 24.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc!
To może być to :-) Sprawdzę i dam znać o wynikach - może mi to zająć trochę //------------------ edit: Wygląda na to, że socket'y to to, o co mi chodziło. :-) Dzięki wielkie za pomoc |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 15:47 |