J'ai un ensemble de webservices utilisés avec la librairie NuSoap.
Ces webservices doivent être appelés dans un certain ordre pour un utilisateur distant.
C'est à dire qu'il y a un séquencement d'actions (d'appels de méthodes) et que l'utilisateur ne doit en aucun cas pouvoir appeler 2 webservices en même temps.
J'aimerais, pour éviter ces appels simultanés et concurrents, mettre un place un système d'attente afin que le premier appel soit bien terminé avant que l'autre se lance.
Pour ce faire, j'ai pensé à un système de sémaphore ou de mutex, comme on fait en langage C. Et là, a mon grand désarroi, je m'aperçois que php est bien mal armé pour ce genre de choses.
D'une part, les sémaphore ne sont disponible que sous les Système V, d'autre part, il faut recompiler le tout, ce qui dans mon cas n'est pas concevable.
J'ai besoin donc d'une restriction par session php, pour ne pas qu'il y ait des appels concurrents aux webservices. J'ai pensé pour cela, utiliser une variable de session "monSemaphore" que je mettrai à 0 ou à 1 si un appel est en cours. Dans le cas ou il y a déjà un appel en cours, je pourrai faire boucler sur un sleep() ou wait() pour tester à intervalle régulier la disponibilité de mon sémaphore. Bien sur, je mettrai aussi un timeout pour éviter tout deadlock.
Mon problème est le suivant : je ne suis pas certain que la lecture ou l'écriture dans une variable de session soit atomique ou protégée (thread safe).
Donc ma question est :
est-ce que la lecture d'une variable de session php est atomique ou "thread safe"? Ou est-ce que cela n'est pas du tout prévu dans php?
Merci beaucoup!
Partager