Coda del negozio di memoria

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Una coda è una struttura dati lineare con una collezione di elementi che segue il principio del primo ad entrare, primo a uscire (FIFO) o dà priorità agli elementi in base a criteri predefiniti. I negozi di memoria supportano due tipi di coda, le code regolari FIFO e le code di priorità. Entrambi i tipi condividono lo stesso insieme di funzioni per inizializzare una coda vuota, aggiungere dati alla coda, leggere dati dalla coda e rimuovere dati dalla coda.

Le code dei negozi di memoria sono utili per l'elaborazione basata sull'ordine e per memorizzare informazioni sugli utenti, come i livelli di abilità, per facilitare il matchmaking in base ai criteri desiderati. Ad esempio, puoi aggiungere una lobby come luogo di partenza del tuo gioco, utilizzare le code dei negozi di memoria come un sistema di archiviazione centralizzato delle informazioni sugli utenti accessibile da più server, gestire l'ordine di posizionamento degli utenti utilizzando le code e teletrasportare gli utenti che hanno completato il matchmaking al luogo principale del tuo gioco.

Ottieni una coda

Per ottenere una coda, chiama MemoryStoreService:GetQueue() con un nome, che è globale all'interno del gioco per qualsiasi script a cui accedere, e un timeout di invisibilità facoltativo in secondi, che previene l'elaborazione duplicata dello stesso elemento della coda. Il timeout di invisibilità è di 30 secondi per impostazione predefinita se lo lasci vuoto, come nel seguente esempio di codice.

Ottenere una coda vuota

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

Quando una coda sta elaborando un elemento al suo interno, il timeout di invisibilità si applica all'elemento, rendendolo invisibile per l'elaborazione da parte di altri server, poiché più server possono aggiornare la coda contemporaneamente. Anche se ci si aspetta di completare sia le operazioni di lettura che di rimozione di un elemento durante la durata del timeout di invisibilità, se si verifica un errore che causa la permanenza dell'elemento nella coda dopo la scadenza del timeout, gli elementi diventano nuovamente visibili per l'elaborazione. In questo modo, il timeout di invisibilità garantisce che tutti gli elementi in una coda possano comunque essere elaborati anche in caso di problemi imprevisti.

Dopo aver ottenuto una coda, chiama una delle seguenti funzioni:

FunzioneAzioni
MemoryStoreQueue:AddAsync()Aggiungi un nuovo elemento alla coda.
MemoryStoreQueue:ReadAsync()Leggi uno o più elementi dalla coda come un'unica operazione.
MemoryStoreQueue:RemoveAsync()Rimuovi uno o più elementi precedentemente letti dalla coda.
MemoryStoreQueue:GetSizeAsync()Ottieni il numero di elementi nella coda.

Aggiungi dati

Per aggiungere un nuovo elemento alla coda, chiama MemoryStoreQueue:AddAsync() con il valore dell'elemento, un tempo di scadenza in secondi e un'opzionale priorità dell'elemento. Se desideri mantenere la tua coda nella sequenza FIFO, puoi lasciare vuota la priorità o passare 0.

Aggiungere dati a una coda

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

Leggi e rimuovi dati

Per leggere uno o più elementi dalla coda in un colpo solo, chiama MemoryStoreQueue:ReadAsync(), che restituisce un id che rappresenta l'elemento letto. Quando hai terminato l'elaborazione degli elementi, chiama immediatamente MemoryStoreQueue:RemoveAsync() per eliminarli dalla coda con il suo id. Questo garantisce che tu non elabori mai più di una volta un elemento. Per catturare e rispondere a tutti gli elementi che vengono continuamente aggiunti a una coda, includi un ciclo come nel seguente esempio di codice:

Leggere e rimuovere dati dalla coda con ciclo

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
-- Ciclo di elaborazione della coda
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

Ottieni dimensione

Per ottenere il numero di elementi nella coda, chiama MemoryStoreQueue:GetSizeAsync(). Questo metodo accetta un booleano facoltativo excludeInvisible. Quando è true, gli elementi invisibili vengono esclusi dal conteggio restituito. Questo booleano è impostato su false per impostazione predefinita.

Ottenere la dimensione di una coda

local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")
local addSuccess, addError = pcall(function()
return queue:AddAsync("User_1234", 30, 1)
end)
if not addSuccess then
warn(addError)
end
local size
local success, sizError = pcall(function()
size = queue:GetSizeAsync(true)
end)
if success then
print(size)
else
warn(sizeError)
end
© 2026 Roblox Corporation. Roblox, il logo Roblox e Powering Imagination sono tra i nostri marchi registrati e non registrati negli Stati Uniti. e altri paesi.