Speicherstoffwechsel-Warteschlange

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Eine Warteschlange ist eine lineare Datenstruktur mit einer Sammlung von Elementen, die entweder dem Prinzip des First-in-First-Out (FIFO) folgen oder Elemente nach vordefinierten Kriterien priorisieren.Speicherstände unterstützen zwei Arten von Warteschlange, die FIFO regelmäßigen Warteschlangen und Prioritäts-Warteschlangen.Beide Arten teilen sich die gleiche Reihe von Funktionen für die Initialisierung einer leeren Warteschlange, das Hinzufügen von Daten zur Warteschlange, das Lesen von Daten aus der Warteschlange und das Entfernen von Daten aus der Warteschlange.

Speicher-Warteschlangen sind nützlich für die Verarbeitung und Lagerung von Bestellungen und die Speicherung von Benutzerinformationen, wie z. B. Fähigkeitsstufen, um das Matchmaking basierend auf Ihren gewünschten Kriterien zu erleichtern.Zum Beispiel können Sie einen Lobby-Ort als Startplatz Ihrer Erlebnishinzufügen, den Speicherplatz von Speicherwarteschlangen als zentrales System zur Verwaltung von Benutzerinformationen verwenden, die Platzierungsreihenfolge von Benutzern mit den Warteschlangen verwalten und den Benutzer teleportieren, der das Matchmaking abgeschlossen hat, an den Hauptplatz Ihrer Erlebnis.

Erhalte eine Warteschlange

Um eine Warteschlange zu erhalten, rufe MemoryStoreService:GetQueue() mit einem Namen an, der global innerhalb des Erlebnisses für jedes Skript Zugriffist, und einen optionalen Unsichtbarkeits-Timeout in Sekunden, der die doppelte Verarbeitung desselben Artikelverhindert.Die Unsichtbarkeits-Timeout beträgt standardmäßig 30 Sekunden, wenn Sie sie wie das folgende Codebeispiel leer lassen.

Eine leere Warteschlange erhalten

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

Wenn eine Warteschlange ein Element verarbeitet, gilt die Unsichtbarkeitsverzögerung für das Artikel, wodurch es von anderen Servern unverarbeitet bleibt, da mehrere Server die Warteschlange gleichzeitig aktualisieren können.Obwohl es erwartet wird, beide Lesen- und Entfernungsvorgänge für ein Element während der Zeit des Unsichtbarkeitszeitlimits abzuschließen, wenn ein Fehler auftritt, der dazu führt, dass das Element nach Ablauf des Zeitlimits in der Warteschlange bleibt, werden die Elemente wieder sichtbar, um bearbeitet zu werden.Bei der Durchführung dieses Vorgangs gewährleistet die Unsichtbarkeits-Timeout, dass alle Elemente in einer Warteschlange immer noch verarbeitet werden können, auch wenn unerwartete Probleme auftreten.

Nachdem du eine Warteschlange erhalten hast, rufe eine der folgenden Funktionen auf, um Daten darin zu lesen oder zu schreiben:

FunktionAktion
MemoryStoreQueue:AddAsync()Füge einem neuen Element zur Warteschlange hinzu.
MemoryStoreQueue:ReadAsync()Lesen einen oder mehrere Artikel aus der Warteschlange als einzelne Operation.
MemoryStoreQueue:RemoveAsync()Entferne einen oder mehrere Artikel, die zuvor aus der Warteschlange gelesen wurden.

Daten hinzufügen

Um einen neuen Artikel zur Warteschlange hinzuzufügen, rufe MemoryStoreQueue:AddAsync() mit dem Artikelwert, einer Ablaufzeit in Sekunden und einer optionalen Priorität des Artikels auf.Wenn du deine Warteschlange in der FIFO-Sequenz behalten möchtest, kannst du die Priorität leer lassen oder 0 passieren.

Daten zu einer Warteschlange hinzufügen

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

Lesen und entfernen von Daten

Um ein oder mehrere Elemente aus der Warteschlange auf einmal zu lesen, rufen Sie MemoryStoreQueue:ReadAsync() auf, das ein id darstellt, das das gelesene Element repräsentiert.Wenn du die Bearbeitung von Artikeln abgeschlossen hast, rufe sofort MemoryStoreQueue:RemoveAsync() auf, um sie aus der Warteschlange mit ihrer id zu löschen.Dies gewährleistet, dass du ein Element nie mehr als einmal verarbeitest.Um alle Elemente zu erfassen und zu antworten, die kontinuierlich in eine Warteschlange hinzugefügt werden, füge einen Schleifen wie das folgende Codebeispiel ein:

Lesen und Entfernen von Daten aus der Warteschlange mit Schleife

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
-- Warteschlangen-Verarbeitungszyklus
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