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:
Funzione | Azione |
---|---|
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