Coda del magazzino di memoria

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

Una coda è una struttura di dati lineare con una raccolta di elementi che segue il principio first-in-first-out (FIFO) o priorizza gli elementi in base a criteri predefiniti.Magazzini di memoria supporta due tipi di coda, la FIFO coda regolare e coda prioritaria.Entrambi i tipi condividono lo stesso set di funzioni per l'inizializzazione di una coda vuota, l'aggiunta di dati alla coda, la lettura dei dati dalla coda e la rimozione dei dati dalla coda.

Le code di archiviazione della memoria sono utili per il trattamento e lo storage dell'informazione utente basato sull'ordine, come i livelli di abilità, per facilitare il matchmaking in base ai criteri desiderati.Ad esempio, puoi aggiungere un luogo della lobby come luogo di partenza della tua esperienza, utilizzare le code di archiviazione della memoria come sistema di archiviazione delle informazioni utente centralizzato accessibile da più server, gestire l'ordine di posizionamento degli utenti utilizzando le code, e teletrasportare l'utente che ha completato il matchmaking al luogo principale della tua esperienza.

Ottieni una coda

Per ottenere una coda, chiama MemoryStoreService:GetQueue() con un nome , che è globale all'interno dell'esperienza per qualsiasi script di Accesso, e un opzionale tempo limite di invisibilità in secondi, che impedisce il trattamento duplicato dello stesso Articolodella coda.Il limite di invisibilità è di 30 secondi per impostazione predefinita se lo lasci vuoto come il 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 in essa, il limite di tempo di invisibilità si applica all'Articolo, rendendolo invisibile dal essere elaborato da altri server, poiché più server possono aggiornare la coda contemporaneamente.Anche se è previsto completare entrambe le operazioni di lettura e rimozione per un oggetto durante la durata del timeout, se si verifica un errore che fa sì che l'oggetto rimanga in coda dopo l'expirazione del timeout, gli oggetti diventano visibili per l'elaborazione di nuovo.Nel fare ciò, il limite di tempo di invisibilità garantisce che tutti gli elementi in una coda possano essere ancora elaborati anche se si Si verificanoproblemi inaspettati.

Dopo aver ottenuto una coda, chiama una qualsiasi delle seguenti funzioni per leggere o scrivere dati in essa:

FunzioneAzione
MemoryStoreQueue:AddAsync()Aggiungi un nuovo oggetto 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.

Aggiungi dati

Per aggiungere un nuovo oggetto alla coda, chiama MemoryStoreQueue:AddAsync() con il valore dell'oggetto, un tempo di scadenza in secondi e una priorità opzionale dell'Articolo.Se vuoi mantenere la tua coda nella sequenza FIFO, puoi lasciare la priorità vuota 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 una volta, chiama MemoryStoreQueue:ReadAsync() , che restituisce un id che rappresenta l'Articololetto.Quando finisci di elaborare gli elementi, chiama immediatamente MemoryStoreQueue:RemoveAsync() per eliminarli dalla coda con il suo id .Questo garantisce che non processi mai un oggetto più di una volta.Per catturare e rispondere a tutti gli elementi che vengono continuamente aggiunti a una coda, includi un ciclo come il seguente esempio di codice:

Lettura e rimozione dei dati dalla coda con loop

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
-- Loop 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