File d'attente du magasin de mémoire

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Une file d'attente est une structure de données linéaire avec une collection d'éléments qui suit le principe du premier arrivé, premier servi (FIFO) ou priorise les éléments en fonction de critères prédéfinis .Les magasins de mémoire supportent deux types de file d'attente, les files d'attente FIFO régulières et prioritaires.Les deux types partagent le même ensemble de fonctions pour initialiser une file d'attente vide, ajouter des données à la file d'attente, lire des données de la file d'attente et supprimer des données de la file d'attente.

Les files d'attente du stock de mémoire sont utiles pour le traitement et le stockage de l'information utilisateur, tels que les niveaux de compétence, afin de faciliter le matchmaking en fonction de vos critères souhaités.Par exemple, vous pouvez ajouter un lieu de lobby comme lieu de départ de votre expérience, utiliser les files d'attente de stockage de mémoire comme système de stockage d'informations utilisateur centralisé accessible par plusieurs serveurs, gérer l'ordre de placement des utilisateurs en utilisant les files d'attente, et téléporter l'utilisateur qui a terminé le matchmaking vers le lieu principal de votre expérience.

Obtenir une file d'attente

Pour obtenir une file d'attente, appelez MemoryStoreService:GetQueue() avec un nom , qui est global dans l'expérience pour tout script d'accès, et un délai d'expiration de l'invisibilité facultatif en secondes , qui empêche le traitement en double de l'élément de la même file d'attente.La limite de temps d'invisibilité est de 30 secondes par défaut si vous la laissez vide comme l'exemple de code suivant.

Obtenir une file vide

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")

Lorsqu'une file d'attente traite un élément dedans, la limite de temps d'invisibilité s'applique à l'item, le rendant invisible d'être traité par d'autres serveurs, car plusieurs serveurs peuvent mettre à jour la file d'attente simultanément.Bien que l'on s'attende à terminer les opérations de lecture et de suppression d'un élément pendant la durée d'expiration de l'invisibilité, si une erreur se produit qui fait en sorte que l'élément reste dans la file d'attente après l'expiration de la durée d'expiration, les éléments deviennent visibles pour être traités à nouveau.En faisant cela, l'expiration de l'invisibilité garantit que tous les éléments dans une file d'attente peuvent toujours être traités même si des problèmes imprévus se survernir.

Après avoir obtenu une file d'attente, appelez l'une des fonctions suivantes pour lire ou écrire des données dedans :

FonctionAction
MemoryStoreQueue:AddAsync()Ajouter un nouvel élément à la file d'attente.
MemoryStoreQueue:ReadAsync()Lire un ou plusieurs éléments de la file d'attente comme une seule opération.
MemoryStoreQueue:RemoveAsync()Supprimer un ou plusieurs éléments précédemment lus de la file d'attente.

Ajouter des données

Pour ajouter un nouvel élément à la file d'attente, appelez MemoryStoreQueue:AddAsync() avec la valeur de l'élément, un temps d'expiration en secondes et une priorité facultative de l'item.Si vous voulez garder votre file d'attente dans la séquence FIFO, vous pouvez laisser la priorité vide ou passer 0 .

Ajouter des données à une file d'attente

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")
local addSuccess, addError = pcall(function()
queue:AddAsync("User_1234", 30, 1)
end)
if not addSuccess then
warn(addError)
end

Lire et supprimer des données

Pour lire un ou plusieurs éléments de la file d'attente à la fois, appelez MemoryStoreQueue:ReadAsync() , qui renvoie un id représentant l'élément lu.Lorsque vous terminez le traitement des articles, appelez immédiatement MemoryStoreQueue:RemoveAsync() pour les supprimer de la file d'attente avec leur id .Cela vous garantit de ne jamais traiter un article plus d'une fois.Pour capturer et répondre à tous les éléments qui sont continuellement ajoutés à une file d'attente, incluez une boucle comme le suivant exemple de code :

Lecture et suppression des données de la file d'attente avec une boucle

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")
local addSuccess, addError = pcall(function()
queue:AddAsync("User_1234", 30, 1)
end)
if not addSuccess then
warn(addError)
end
-- Boucle de traitement de la file d'attente
while true do
local readSuccess, items, id = pcall(function()
return queue:ReadAsync(1, false, 30)
end)
if not readSuccess then
task.wait(1)
elseif #items > 0 then
print(items, id)
local removeSuccess, removeError = pcall(function()
queue:RemoveAsync(id)
end)
if not removeSuccess then
warn(removeError)
end
end
end