Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nasłuchiwanie w PHP
Forum PHP.pl > Forum > PHP
markonix
Witam,

napisałem BOTa w oparciu o klasę rfGG.
Zastanawia mnie czy w czystym PHP mógłbym zręcznie go uruchomić tj. aby użytkownik otrzymywał w miarę szybką odpowiedź.
Usatysfakcjonował by mnie cron co 10sekund smile.gif
CuteOne
sam sobie odp. na pytanie wink.gif cron
wookieb
Cron na minute + sleep co 10 s w skrypcie
Crozin
Powinieneś zrobić normalnego daemona: http://pear.php.net/package/System_Daemon
markonix
Cytat(CuteOne @ 22.03.2011, 03:43:34 ) *
sam sobie odp. na pytanie wink.gif cron

Nie wiem czy jest to do zmiany (mam dedyka) ale maksymalnie mogę ustawić crona co minutę w DA wink.gif
thek
To norma. CRONa nie idzie wywoływać częściej. To co proponuje Ci wookieb to napisanie pętli, która ma kilka iteracji (kodu z segmentami czy co ta chcesz), a każda z nich jest wstrzymywana na ileś sekund.
markonix
Cron co minutę 1 slepp na sekundę, brzmi ciekawe, a zarazem banalnie.
Deamon byłby ciekawym wyzwaniem tylko zastawia mnie jaka tu jest praktyczna różnica (demon też nie jest przecież wykonywany co milisekundę, ani też wywoływany jakimś zewnętrznym zdarzeniem, tu np. przyjściem wiadomości gg) między demonem a cronem?

Na forum pojawiła się właśnie klasa do BOTA GG i jest tam:
Kod
// Nieskończona pętla, konieczna aby skrypt się nie zakończył a bot działał 24/h
// Przełamie się dopiero gdy admin wyśle do bota komendę wyłączającą lub utworzymy plik a.txt w katalogu bota

set_time_limit(0);

while ( !is_file('a.txt')

Zastanawia mnie skuteczność i bezpieczeństwo tej metody?

Jeszcze 3 sprawa mnie zastanawia: gdybym popełnił błąd w obliczeniach i źle ustawił funkcję slepp + cron co minutę i doszło by do sytuacji gdy pierwszy cron wykonywał by się jeszcze, gdy drugi by się miał urchomić to czy to doprowadziłoby do:
- wyłączenia pierwszego "wywołania"
- braku reakcji na drugi cron
- dwa crony jednocześnie?
erix
Cytat
jaka tu jest praktyczna różnica (demon też nie jest przecież wykonywany co milisekundę, ani też wywoływany jakimś zewnętrznym zdarzeniem, tu np. przyjściem wiadomości gg) między demonem a cronem?

Demon działa w pętli nieskończonej i nie jest to zależne w żaden sposób od czasu. Choć są i sposoby, które wymagają sprawdzania czasowego, ale jeśli chodzi o programowanie zdarzeniowe (np. JS, Qt, etc), to wówczas masz minimalne opóźnienia czasu reakcji w stosunku do akcji.

Cytat
Jeszcze 3 sprawa mnie zastanawia: gdybym popełnił błąd w obliczeniach i źle ustawił funkcję slepp + cron co minutę i doszło by do sytuacji gdy pierwszy cron wykonywał by się jeszcze, gdy drugi by się miał urchomić to czy to doprowadziłoby do:

Google: race condition.
markonix
Cytat(erix @ 22.03.2011, 16:57:17 ) *
Demon działa w pętli nieskończonej i nie jest to zależne w żaden sposób od czasu.

Gdybym w demonie ustawił jakieś zapytanie do bazy to by je wykonywał po kilka tysięcy razy w zależności od mocy obliczeniowej serwera?
Jego stosowanie ma chyba jedynie sens gdy go odpowiednio ograniczymy (slepp lub coś podobnego), aby wykonywał się co np. pół sekundy?
zegarek84
jeśli robisz to na socketach to nie potrzebujesz timouta - wystarczy jeśli nasłuch na sockecie ustawisz w trybie blokowanym stream_set_blocking
erix
~markonix, nie - oczekujesz po prostu w pętli na zdarzenie, a wykonujesz zapytanie dopiero wtedy, gdy ono nastąpi.
markonix
Cytat(erix @ 22.03.2011, 22:46:36 ) *
~markonix, nie - oczekujesz po prostu w pętli na zdarzenie, a wykonujesz zapytanie dopiero wtedy, gdy ono nastąpi.


Ale domyślam się gdybym tym zdarzeniem była np. jakaś zmiana w bazie danych to SELECT, który by był odpowiedzialny za wykrycie tego zdarzenia wykonywał by się kilka tysięcy razy na minutę? Oczywiście to tylko tak hipotetycznie smile.gif
erix
Hmm, od tego chyba jest trigger. wink.gif
kiler129
Zrób demona i zainteresuj się stream_select() - wykożystasz wtedy pool systemu i php będzie jako idle zanim nie dostanie danych od serwera gg (wtedy dopiero "odmrozi" kod)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.