Souci de doublons

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Souci de doublons

Re: Souci de doublons

par mauritiusman1987 » 16 déc. 2012, 15:25

Bonjour Moogli,
merci pour ta réponse. Je suis effectivement obligé de faire tourner mon script toutes les 10 secondes car sinon les enchères auto ne passent plus.

Toutes les 10 secondes je lance mon script qui vérifie si les produits sont en dessous des 5 secondes restantes, si c'est le cas alors je charge un profil qui s'est mit en auto sur cette enchère. Je modifie ma base de données, prix et réinitialise le compte à rebours.

Au départ je faisais cette vérification via Javascript côté utilisateur si une enchère était en dessous des 5 secondes alors je lancé mon PHP en lui envoyant l'id du produit sauf que cette solution n'était pas très viables car s'il n'y avait personne sur le site les enchères auto ne fonctionnaient plus.

Pour les piles je ne vois pas trop comment mettre cela en place peut être tu pourrais m'éclairer. Ci-dessous mon fonctionnement :

Produit 1 (compte a rebours 20sec)= J'ai 2 enchères auto + des clients qui font des clics manuels

Les clients en manuels peuvent cliquer chacun leur tour. Si l'utilisateur1 clic alors il n'a plus le bouton encherir tant qu'il a la main. Une fois que le clic a eu lieu l'ensemble des utilisateurs ont l'information en temps réel.

Tant que mon compte a rebours ne sera pas en dessous des 5 secondes, les enchères auto ne passeront jamais.

Merci pour ton aide

Re: Souci de doublons

par moogli » 16 déc. 2012, 13:55

salut,


il faut commencer par savoir pourquoi tu as des "requête qui se chevauchent".
Est ce que le temps de traitement n'est pas plus long que l'intervalle de la tâche cron ?

Pour le résoudre il y a plusieurs possibilités qui dépendent de ton architecture et de tes règles de gestion.
1/ as tu réellement besoin d'être réactif toutes les 10 secondes ? Est ce que tu ne peux pas imaginer un système de trigger qui réalise l'enchère automatique lorsqu'il y a une modification ?

2/ Comment fait tu pour arbitrer deux personnes en auto sur la même offre ?

3/ Comment évite tu un boucle infinie (parce que si pas de limite les mecs vont enchérir en boucle.

Coté solution tu peux imaginer, un script qui sert de pile, qui est le seul a pouvoir exécuter les requêtes de mise a jour et les exécutes l'un après l'autre dans l'ordre d'arrivée (fifo) ?

tu peux aussi utiliser une procédure stockée qui lock la table évitant des modif des autres, faut les recherches / calculs qui vont bien, la mise a jour et rend la main a la fin.

@+

Souci de doublons

par mauritiusman1987 » 16 déc. 2012, 13:08

Bonjour à toute la communauté.
Je sollicite votre aide aujourd'hui car je rencontre un souci au niveau d'un script PHP sur lequel je travaille et j'ai retourné le problème mais je ne vois pas comment le régler.

Je travaille actuellement sur un script d'enchère aux centimes sur lequel j'ai un script permettant aux utilisateurs de programmer des enchères automatiques. Ce script et ensuite lancé par une tache cron puis j'ai "daemonisé" ce script afin qu'il se lance toutes les 10 secondes. Le problème est qu'a chaque fois dans l'historique des enchères je me retrouve avec des doublons.

Le script peut bien fonctionné sur une série de 15 enchères puis soudainement j'ai 2 fois, 3 fois des doublons... J'ai vue ce problème avec mon hébergeur qui me dit que cela arrive car j'ai des requêtes PHP qui se chevauche. J'ai beau mettre des die(), des exit() mais rien n'y fait...

Y a-t-il un moyen de savoir si un script a fini son execution avant de le rappeler...La je sèche

Merci beaucoup