[PHP] cron na 10 sekund
6 naročnikov
6 naročnikov
Živjo,
rabil bi cron, ki bi na 10 sekund sparsal neko stran.
Ker dela cron samo na minutne intervale sem razmišljal da bi naredil php skripto, ki bi imela 6x funkcijo parsanja in vmes sleep(10).
Mislite da je lahko problem in se server preveč s časoma zabaše ker:
-parsanje traja cca 1 sekundo in potem 10s pavze = 11s
-potem čez 1 min bi cron ponovno zagnal skripto in ti tajmingi bi se lahko s časom začeli prekrivati.
Kako bi lahko na najboljši način naredil "cron" varjanto na 10 sekund?
Že v naprej se zahvaljujem za briljantne ideje :)
9 odgovorov
predno karkoli delaš se vprašaj če ti ne bojo IP zablokirali če jim boš na 10 sekund smetil povezavo!
Napiši si daemona v PHPju, na PHP konferenci je bilo lušno predavanje o tem, če te ni bilo tam, pa malo pogooglaj [php daemon].
Ledi:
predno karkoli delaš se vprašaj če ti ne bojo IP zablokirali če jim boš na 10 sekund smetil povezavo!
O'ja ... nekaterim lahko narediš 10k+ zahtevkov na dan (pa ne čez cel dan), pa nič ne ukrenejo ... ne hosting, ne lastnik strani :)
tako pogosto zahtevanje in parsanje strani je slaba praksa, krši netiketo in je sigurno rešljivo drugače. Lahko bi mu tudi rekli napad na neko spletno stran, tudi če se žrtev ne pritoži. :)
Ni sigurno rešljivo drugače ... sploh če moreš določeno število strani sparsati v omejenem času, kako boš potem rešil drugače?
Pritoži ali pa ne ... mogoče sploh ne ve, važno, da "žrtvi" page laufa pa je zadovoljna =D. Napad .. no ja, sej če vidiš, da je stran začela počasi delat boš pač parsal na 20 sekund al pa več, namesto 10 ... glede na to da hočeš sparsati do konca. Če bi pa rad "napadal" pa se malo potrudiš pa bo zadeva offline al pa kaki bandwidth limit exceeded ... =D
Enako stvar že parsam 1 leto in sicer tako, da uporabnik pošlje ajax request, server zadevo sparsa in pocachira v txt file, ki je v bistvu timestamp. In tako vsakič preverjam, če je trenutni timestamp večji za 10s od prejšnjega (cachiranega - 123423423.txt).
Zdaj bi pa rad, da to stvar naredi cron ne pa user client side ajax request.
vini: Si bom pogledal php deamon, thx
fatg: mislim, da ni možno drugače. (podatki, ki jih moram prikazovati na strani so na drugem strežniku, in tam se spreminjajo non stop, še 10s je preveč)
blackmamba, pa je tisti drugi strežnik pod tvojo kontrolo? Če je, bi lahko ob spremembi podatkov pushal vsebino na strežnik, kjer jo prikazuješ.
Pravzaprav imam na serverju neko skripto, ki se poveže z remote mysql-om na nek strežnik, kjer imam dostop samo do baze. Vedno bere iz iste tabele, kjer so non-stop frišni podatki.
Ta skripta ni v cronu, ampak jo uporabniki z javascriptom sprožijo vsakih 10s (prototype: ajax periodical updater).
Skripta najprej preveri ali je pocachiran file(123234324.txt) starejši od 10s. Če je, potem tega zbriše in naredi novega. V nasprotnem primeru ga samo prebere(ni povezave z bazo).
Zadeva dela že 1 in pol BP, procesor je ob navalu dopoldan cca 40-60% idle, drugače tudi 90%. Jaz bi pa to mal 'zoptimiziral' :)