Vra

Eerste,

die stel:

Ek het'n script wat voer verskeie take na'n gebruiker tref die "upload" - knoppie wat stuur die script die data wat dit nodig het.Nou, hierdie deel is tans verpligtend nie, ons het nie die opsie om by hierdie punt uit te sny die oplaai en teken van'n lewende bron.

Hierdie artikel doelbewus ellelange om'n punt te maak.Slaan voor as jy haat wat

Nou die data is verwerk uit'n baie funky bron gebruik regex, dan is afgebreek in'n skikking.Dit is dan gaan die DB vir enige data wat reeds in die foto data se datum bereik.As die data op datum wissel nie reeds bestaan in die DB, dit voeg die data en uitsette sukses aan die gebruiker (daar is ook'n paar sekuriteit kontrole, data bron validering, en basiese upload validering)...As die data nie bestaan nie, sal die skrif dan kry die data wat reeds in die DB, vind die verskille tussen die twee stelle, verwyder die ou data wat nie pas, voeg die nuwe data, en dan stuur'n e-pos aan elke persoon wat geraak word deur hierdie veranderinge (een e-pos per persoon met alle relevante veranderinge in die genoemde e-pos, wat is'n heel ander stap).Die e-pos adresse is getrek deur middel van'n LDAP soek as ons DB het hul werk e-pos, maar die LDAP het hul persoonlike e-pos wat verseker hulle kry die e-pos voor hulle kom in die volgende dag en kry gevang onbewus.Ten slotte, die data-uploader is vertel "Veranderinge is gemaak, e-pos is gestuur." wat is regtig al hulle omgee.

Nou ek kan die toevoeging van'n Google-Kalender API dat poste van die data (wanneer dit skedulering data) aan die gebruiker se Google-Kalender.Ek sou dit doen via hul werk kalender, maar ek het gedink ek wil my tone nat met Google se API voordat die hantering van die opstel van'n WebDav-stelsel vir die Uitruil.

</backstory>

Nou!

Die praktiese vraag

Op hierdie punt, pre-Google integrasie, die script neem ten minste'n tweede en'n half om te hardloop.Dit is redelik indrukwekkende, ten minste ek dink nie so nie (die bediener, nie my kodering).Maar die Google bietjie, in toetse, is SLOOOOW.Ons kan waarskynlik los, maar dit verhoog die groter vraag...

Wat is die beste manier om af te laai'n paar van die werk na die gebruiker het bevestiging gekry dat die DB is opgedateer?Dit is die deel wat hy die meeste betrokke is met en die mees kritieke deel.E-pos kennisgewings en Google Kalender updates is net daar vir die voordeel van diegene wat geraak word deur die oplaai, en as daar is'n probleem met hierdie kennisgewings, hy sal hoor oor dit (en dan sal ek hoor oor dit), ongeag van die skrif vertel hom eerste.

So is daar'n manier, byvoorbeeld, uit te voer'n cronjob dit is veroorsaak deur'n script se laaste uitvoering?Kan PHP skep cronjobs met exec() vermoë?Is daar sommige genormaliseer manier om van die hantering van die post-uitvoering van die werk wat nodig is om gedoen?

Enige advies oor dit is regtig baie waardeer.Ek voel soos die skrifte opgeblase-heid weerspieël my stadium van ontwikkeling en die behoefte vir my om uiteindelik te weet hoe om dit te doen verdeling van arbeid in die web programme.

Maar ek kry ook bekommerd dat dit nie gedoen word nie, as die gebruiker se behoefte om te weet wanneer al die take voltooi, ens.So dit bring:

Die beste praktyke/meer-subjektiewe vraag

Basies, is daar'n idee dat die vooruitgang bars, real-tyd aflaai, en ander maniere van die behoud van die gebruiker vasgemaak aan die script is-wanneer dit gekombineer met die optimalisering van die kode, natuurlik-die beter, meer-voorkeur-metode dan net sê: "Ons is klaar met jou deel, as jy ons nodig het, sal ons in kennis te stel van die gebruikers", ens, ens.

Is daar enige GROOT dinge te vermy (behalwe natuurlik nie gee die gebruiker enige terugvoer op al)?

Dankie vir die lees.Die kodering wat deel is van kardinale belang, so moenie verplig voel om te dek die tweede deel of vergeet om te dek die kodering deel!

Was dit nuttig?

Oplossing

Daar is 'n aantal maniere om te gaan oor hierdie. Jy kan exec (), soos die bogenoemde sê, maar jy kan potensieel loop in 'n DoS situasie as daar te veel in te dien klik. die pcntl uitbreiding is waarskynlik beter by die bestuur van prosesse soos hierdie. Kyk bietjie na hierdie post om 'n bespreking (daar is 3 dele) te sien.

Jy kan Javascript gebruik om 'n tweede, Ajax post dat die toepaslike werker script daarna loop stuur. Deur die gebruik van ignore_user_abort () en stuur 'n inhoud-lengte, kan die leser vroeg ontkoppel, maar jou apache proses sal voortgaan om te hardloop en jou data te verwerk. Onderstebo is geen forkbomb potensiaal, nadeel is dit sal meer apache prosesse oop te maak.

Nog 'n opsie is om 'n cron gebruik in die agtergrond wat kyk na 'n proses-tou tafel vir dinge om 'later' doen - jy items te hou in hierdie tabel op die voorkant, verwyder hulle op die agterkant tydens die verwerking van (kyk Zend_Queue ).

Nog 'n is 'n meer verspreide werk raamwerk gebruik soos gearmand -. Wat items op ander masjiene kan verwerk

Dit hang alles af van jou algehele vermoëns en behoeftes.

Ander wenke

'n cron is goed vir hierdie. As alles wat jy wil doen wanneer 'n gebruiker oplaai data is sê "Hey gebruiker, dankie vir die data!" dan sal dit goed wees.

As jy verkies om 'n meer onmiddellike benadering, dan kan jy exec() gebruik om 'n agtergrond te begin. In 'n Linux-omgewing sou dit soos volg lyk:

exec("php /path/to/your/worker/script.php >/dev/null &");

Die & deel sê "loop my in die backgound." Die >/dev/null deel aansture uitset na 'n swart gat. Sover die hantering van alle foute en in kennis te stel toepaslike partye -. Dit is alles neer op die ontwerp van jou werker script

Vir 'n meer buigsame kruis-platform benadering, check hierdie PHP handleiding post

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top