Kolejka jest liniową strukturą danych z kolekcją elementów, które albo podążają za zasadą first-in-first-out (FIFO), albo priorytetują elementy na podstawie ustalonych wcześniej kryteriów.Pamięć przechowuje wspiera dwa rodzaje kolejek, FIFO zwykłe kolejki i priorytetowe kolejki.Oba typy dzielą ten sam zestaw funkcji do inicjalizacji pustej kolejki, dodawania danych do kolejki, odczytywania danych z kolejki i usuwania danych z kolejki.
Kolejki przechowywania pamięci są przydatne do przetwarzania i przechowywania informacji użytkownika, takich jak poziomy umiejętności, ułatwiających dopasowanie na podstawie wybranych kryteriów.Na przykład możesz dodać miejsce w lobby jako początkowe miejsce swojego doświadczenia, wykorzystać kolejki magazynu pamięci jako scentralizowany system przechowywania informacji o użytkownikach dostępny dla wielu serwerów, zarządzać kolejnością umieszczenia użytkowników za pomocą kolejek i teleportować użytkownika, który zakończył matchmaking, do głównego miejsca swojego doświadczenia.
Zdobądź kolejkę
Aby uzyskać kolejkę, zadzwoń z nazwą , która jest globalna w doświadczeniu dla każdego skryptu, który ma dostęp, oraz opcjonalnym czasem wygaśnięcia niewidzialności w ciągu kilku sekund, który zapobiega powtórnemu przetwarzaniu tego samego przedmiotkolejki.Czas wygaśnięcia niewidzialności wynosi domyślnie 30 sekund, jeśli pozostawisz go pustym, jak następujący przykład kodu.
Zdobycie pustej kolejki
local MemoryStoreService = game:GetService("MemoryStoreService")local queue = MemoryStoreService:GetQueue("Queue1")
Kiedy kolejka przetwarza przedmiot w niej, czas wygaśnięcia niewidzialności ma zastosowanie do przedmiotu, czyniąc go niewidocznym z przetwarzania przez inne serwery, ponieważ wiele serwerów może jednocześnie aktualizować kolejkę.Chociaż oczekuje się, że ukończy obie operacje odczytu i usuwania dla przedmiotu podczas czasu wygaśnięcia niewidzialności, jeśli wystąpi błąd, który powoduje, że przedmiot pozostaje w kolejce po wygaśnięciu czasu, przedmioty stają się widoczne do ponownego przetwarzania.Robiąc to, czas wygaśnięcia niewidzialności gwarantuje, że wszystkie przedmioty w kolejce nadal mogą być przetwarzane, nawet jeśli występowaćnieoczekiwane problemy.
Po otrzymaniu kolejki wezwij którąkolwiek z następujących funkcji, aby przeczytać lub zapisać dane w niej:
Funkcja | Akcja |
---|---|
MemoryStoreQueue:AddAsync() | Dodaj nowy przedmiot do kolejki. |
MemoryStoreQueue:ReadAsync() | Przeczytaj jeden lub więcej przedmiotów z kolejki jako jedną operację. |
MemoryStoreQueue:RemoveAsync() | Usuń jeden lub więcej przedmiotów wcześniej przeczytanych z kolejki. |
Dodaj dane
Aby dodać nowy element do kolejki, wezwij MemoryStoreQueue:AddAsync() z wartością przedmiotu, czasem wygaśnięcia w sekundach i opcjonalną priorytetem przedmiotu.Jeśli chcesz utrzymać kolejkę w kolejności FIFO, możesz pozostawić priorytet pusty lub przekazać 0 .
Dodawanie danych do kolejki
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
Przeczytaj i usuń dane
Aby przeczytać jeden lub więcej przedmiotów z kolejki naraz, wezwij MemoryStoreQueue:ReadAsync(), który zwraca id reprezentujący odczytywany przedmiot.Po zakończeniu przetwarzania przedmiotów natychmiast wezwij MemoryStoreQueue:RemoveAsync() , aby usunąć je z kolejki za pomocą id .Zapewnia to, że nigdy nie przetwarzasz przedmiotu więcej niż jeden raz.Aby zarejestrować i odpowiedzieć na wszystkie przedmioty, które są ciągle dodawane do kolejki, uwzględnij pętelę loop taką jak przykład kodu poniżej:
Czytanie i usuwanie danych z kolejki za pomocą pętla
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
-- Pętla przetwarzania kolejki
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