asynchrone curl requests veroorzaken problemen door simultane acties
De volgorde waarin de request behandeld worden doet in mijn geval niet ter zake. Als er maar één van de twee afgerond is, voordat de volgende (erbij horende) begint.
Ik hoop dat bovenstaande duidelijk genoeg is. Zo niet, laat het me dan even weten, dan zal ik proberen het nog wat duidelijker te verwoorden.
Het enige dat ik zelf heb kunnen bedenken om het probleem op te kunnen lossen is een time-out inbouwen vóór het script die gebaseerd wordt op het volgnummer van de request (deze is uniek per request). Aangezien de time-out dan altijd anders is, zullen de scripts nooit tegelijkertijd lopen. Dit zou het probleem oplossen, maar is natuurlijk geen nette oplossing. Ik vroeg me af op jullie een beter idee voor me hebben?
Alvast bedankt voor het meedenken!
Wat je eventueel zou kunnen doen is garanderen dat er altijd maar 1 request tegelijk kan lopen, bijvoorbeeld dmv een lockfile. Dan kunnen er 2 requests binnenkomen, maar worden ze altijd na elkaar behandeld.
Hier ben ik niet bekend mee. Wat houdt dat in en hoe werkt dat? Werkt dat ook als de request echt op dezelfde milliseconde binnenkomen?
Indien dit gaat over database-queries: gebruik transacties in combinatie met het vergrendelen van records of tabellen.
Het principe is telkens hetzelfde en komt in wezen ook neer op wat @Ben voorstelt: je claimt een unieke resource voor jezelf die je het recht geeft om dingen te doen, en anderen moeten vervolgens op hun beurt wachten. Een soort van spreekstok als het ware.
Gewijzigd op 29/08/2016 11:47:28 door Thomas van den Heuvel
Transacties lijkt inderdaad wel op wat ik nodig heb. Echter hoe zorg ik er vervolgens voor dat de tweede actie (die dus niet slaagt omdat de eerste zaken blokkeerd) niet faalt en ge-rollback't wordt, maar gewoon iets later alsnog uitgevoerd wordt. Kan ik in een catch ook simpelweg de query nog een keer proberen uit te voeren?
Quote:
Echter hoe zorg ik er vervolgens voor dat de tweede actie (die dus niet slaagt omdat de eerste zaken blokkeerd) niet faalt en ge-rollback't wordt, maar gewoon iets later alsnog uitgevoerd wordt.
Dat gebeurt vanzelf, mits het binnen een bepaalde timeout is geloof ik. Maar als de acties nagenoeg milliseconden op elkaar volgen, of zelfs in dezelfde plaatsvinden, zal dat geen probleem zijn. Rest het je tabellen/records op de juiste manier te locken. Het simpelweg starten + committen van een transactie is NIET genoeg.
Kom anders eens met wat concrete code/queries, dat praat wat makkelijker...