Cronjobs
Maar wat moet ik dan doen met een cronjob, want die is maar gelimiteerd tot 1 minuut.
Ik kan wel een while loop gebruiken en dan elke keer sleep(1) maar dit werkt niet echt briljant. omdat het maar 59,63 wordt gedraaid van de 60 sec.
Dat is dus 0,37 seconden dat ik mis.
Of is het verstandig om 60 cronjobs in te stellen met allemaal 1 seconde speling?
Gewijzigd op 15/09/2010 13:14:52 door Cars Meulman
Ik zal het proberen uit te leggen met een tijdslijn
0.00 Product wordt aangemaakt
0.30 Iemand kijkt maar er zijn nog meer dan 3 seconden dus gebeurt niks
0.57 de 3 seconden zijn voorbij maar niemand kijkt. Met je cronjob per seconden (mag je zelf nog uitzoeken hoe) hadden we nu al 56 nutteloze requests gehad
1.27 Iemand kijkt, er is nog minder dan 3 seconden over ( -27 om precies te zijn) we maken het bod aan en geven het de tijd 0.57 mee waardoor het lijkt alsof het toen al plaatsvond.
Oftewel mezelf even quoten
TJVB tvb op 15/09/2010 11:23:43:
Je kunt mij nog steeds niet duidelijk maken wat het probleem is als dat later gebeurt en dan alles in 1 keer "inhaalt" als er niemand kijkt is het ook niet erg als de data achterloopt.
Je doet namelijk een onnodig aantal requests om te kijken of de tijd al voorbij is. En je probeert php te misbruiken op een manier waarvoor het niet bedoelt is.
Als je de gebruiker de mogelijkheid wil geven een autobid te gebruiken, kan dit nog steeds zonder zo'n overdreven cronjob.
Stel:
Jantje plaatst een bod op product X.
jantja gaat offline, niemand is online op de website. Jantje heeft echter wel autobieden aangezet.
Pietje komt op de site, en plaatst een bod op product X. Het systeem ziet: "He! Pietje plaatst een bod, maar jantje had auto biedingen aanstaan! Dan plaats ik er een bod overheen als het aan de criteria voldoet!"
Oftewel: Je hoef toch geen bod te plaatsen als er geen user input is geweest. Het is niet zo dat er zomaar uit het niets een bod geplaatst moet worden, daar is een aanleiding voor. En die aanleiding is een user input.
Dat de user input neit van Jantje komt, maar van Pietje, dat maakt niet uit.
Niek en ik zitten op dezelfde lijn, waarschijnlijk heeft hij ook al vaker met het bijltje gehackt
Producten lopen af op tijd, dit kan op elke tijdstip gebeuren.
Wat jullie uitleggen zou dat betekenen dat als jantje een autobied aanzet voor productA om 16:00. ProductA begint pas om 20:00. Veiling loopt door omdat iedereen overbied tot zeg maar 00:00, als dan niemand online is en een product stopt om 00:00.
Maar niemand is online dus geen user input.
Maar de veiling is technisch wel gestopt omdat het over zijn tijd is.
Eigenlijk moet meteen een mailtje worden verstuurd hey de veiling is geeindigt en jij hebt gewonnen.
Maar dit zou bij jullie pas bij de volgende user input zijn en als de volgende user input pas bijvoorbeeld om 8 uur sochtends is??
Verder moet je natuurlijk zorgen dat ze geen autobieden kunnen instellen op een veiling die nog niet bestaat.
En dan zou ik bijvoorbeeld 1 x in de 5 minuten een cronjob kunnen laten uitvoeren of als er een userinput is die kijkt of er autobieders zijn zoja dan moet de tijd aangepast worden.
Tot dat er geen autobieders meer zijn en dan eindigen.
Als je inderdaad op een bepaald tijdstip een mail wil verzenden heb je geen andere keus.
Maar dan moet je jezelf afvragen of dat echt iedere 5 minuten nodig is.
Kan dit niet ieder uur?
Niemand kijkt zijn mail namelijk iedere seconde, en in de mail staat dan wel de daadwerkelijke afloop datum.
En het allermooiste is nog: later kun je altijd nog besluiten dat je er 2x per uur van maakt bijvoorbeeld (met de */2 syntax)
Niek s op 15/09/2010 14:52:25:
later kun je altijd nog besluiten dat je er 2x per uur van maakt bijvoorbeeld (met de */2 syntax)
*/2 betekent elke 2 minuten.
*/30 is elk half uur.
Danku allemaal!
Cars Meulman op 15/09/2010 13:51:52:
Wat jullie uitleggen zou dat betekenen dat als jantje een autobied aanzet voor productA om 16:00. ProductA begint pas om 20:00. Veiling loopt door omdat iedereen overbied tot zeg maar 00:00, als dan niemand online is en een product stopt om 00:00.
Maar niemand is online dus geen user input.
Maar de veiling is technisch wel gestopt omdat het over zijn tijd is.
Wat jullie uitleggen zou dat betekenen dat als jantje een autobied aanzet voor productA om 16:00. ProductA begint pas om 20:00. Veiling loopt door omdat iedereen overbied tot zeg maar 00:00, als dan niemand online is en een product stopt om 00:00.
Maar niemand is online dus geen user input.
Maar de veiling is technisch wel gestopt omdat het over zijn tijd is.
maar als iedereen een autobied aangezet heeft, en er niemand meer online is, dan zou de geene die als laatst autobied aangezet heeft altijd winnen... ?!
SanThe Nvt op 15/09/2010 15:14:24:
*/2 betekent elke 2 minuten.
*/30 is elk half uur.
Niek s op 15/09/2010 14:52:25:
later kun je altijd nog besluiten dat je er 2x per uur van maakt bijvoorbeeld (met de */2 syntax)
*/2 betekent elke 2 minuten.
*/30 is elk half uur.
Hmm. Ik zie inderdaad dat mijn uitleg daar suggereerd dat */2 in de uur kolom zou betekenen dat het 2x per uur draait, omdat ik daarvoor net die suggestie maakte :)
Nja zo was het niet bedoeld, maar zie dus SanThe's opmerking voor correctie.
Bart Lemmens op 15/09/2010 15:23:14:
maar als iedereen een autobied aangezet heeft, en er niemand meer online is, dan zou de geene die als laatst autobied aangezet heeft altijd winnen... ?!
Cars Meulman op 15/09/2010 13:51:52:
Wat jullie uitleggen zou dat betekenen dat als jantje een autobied aanzet voor productA om 16:00. ProductA begint pas om 20:00. Veiling loopt door omdat iedereen overbied tot zeg maar 00:00, als dan niemand online is en een product stopt om 00:00.
Maar niemand is online dus geen user input.
Maar de veiling is technisch wel gestopt omdat het over zijn tijd is.
Wat jullie uitleggen zou dat betekenen dat als jantje een autobied aanzet voor productA om 16:00. ProductA begint pas om 20:00. Veiling loopt door omdat iedereen overbied tot zeg maar 00:00, als dan niemand online is en een product stopt om 00:00.
Maar niemand is online dus geen user input.
Maar de veiling is technisch wel gestopt omdat het over zijn tijd is.
maar als iedereen een autobied aangezet heeft, en er niemand meer online is, dan zou de geene die als laatst autobied aangezet heeft altijd winnen... ?!
Natuurlijk, want die moet sowieso het hoogste hebben.
Neej degene wint wie het meeste biedingen heeft.
Cars Meulman op 15/09/2010 18:49:37:
Neej degene wint wie het meeste biedingen heeft.
Wat een onzin. Dus als Jantje 10 keer 1 cent bied, en Pieter bied 2 keer 1 euro, dan heeft Jantje gewonnen?
Maar ik heb wat ik wil.
Thanks iedereen!