Cola de almacenamiento de memoria

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Una cola es una estructura de datos lineal con una colección de elementos que sigue el principio de primera entrada primero (FEP) o prioriza elementos según criterios predefinidos.Las tiendas de memoria soportan dos tipos de cola, la FIFO colas regulares y colas prioritarias.Ambos tipos comparten el mismo conjunto de funciones para inicializar una cola vacía, agregar datos a la cola, leer datos de la cola y eliminar datos de la cola.

Las colas de almacenamiento de memoria son útiles para el procesamiento y almacenamiento basado en pedidos de la información del usuario, como los niveles de habilidad, para facilitar el emparejamiento basado en los criterios deseados.Por ejemplo, puedes agregar un lugar de lobby como el lugar de inicio de tu experiencia, usar las colas de almacenamiento de memoria como un sistema de almacenamiento de información de usuario centralizado accesible por múltiples servidores, gestionar la orden de colocación de los usuarios que usan las colas, y teletransportar al usuario que ha completado el emparejamiento al lugar principal de tu experiencia.

Obtener una cola

Para obtener una cola, llame a con un nombre , que es global dentro de la experiencia para que cualquier script acceso, y un tiempo de espera de invisibilidad opcional en segundos , que evita la duplicación de procesamiento del mismo objetode cola.El tiempo de desactivación de invisibilidad es de 30 segundos por defecto si lo dejas vacío como el siguiente ejemplo de código.

Obtener una cola vacía

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

Cuando una cola está procesando un artículo en ella, el tiempo límite de invisibilidad se aplica al objeto, haciéndolo invisible de ser procesado por otros servidores, ya que múltiples servidores pueden actualizar la cola simultáneamente.Aunque se espera que complete las operaciones de lectura y eliminación para un artículo durante la duración del tiempo de espera de invisibilidad, si ocurre un error que hace que el artículo permanezca en la cola después del tiempo de espera, los artículos se vuelven visibles para su procesamiento nuevamente.Al hacer esto, el tiempo de espera de invisibilidad garantiza que todos los elementos en una cola aún se puedan procesar incluso si producirseproblemas inesperados.

Después de obtener una cola, llame a cualquiera de las siguientes funciones para leer o escribir datos en ella:

FunciónAcción
MemoryStoreQueue:AddAsync()Añadir un nuevo artículo a la cola.
MemoryStoreQueue:ReadAsync()Leer uno o más elementos de la cola como una sola operación.
MemoryStoreQueue:RemoveAsync()Eliminar uno o más elementos leídos previamente de la cola.

Añadir datos

Para agregar un nuevo artículo a la cola, llame a MemoryStoreQueue:AddAsync() con el valor del artículo, un tiempo de expiración en segundos y una prioridad opcional del objeto.Si desea mantener su cola en la secuencia FIFO, puede dejar la prioridad vacía o pasar 0 .

Añadir datos a una cola

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

Leer y eliminar datos

Para leer uno o más elementos de la cola a la vez, llame a MemoryStoreQueue:ReadAsync() , que devuelve un id que representa el objetoleído.Cuando termines de procesar artículos, llama inmediatamente a MemoryStoreQueue:RemoveAsync() para eliminarlos de la cola con su id .Esto garantiza que nunca proceses un artículo más de una vez.Para capturar y responder a todos los elementos que se agreguen continuamente a una cola, incluya un bucle como el siguiente ejemplo de código:

Lectura y eliminación de datos de la cola con bucle

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
-- Bucle de procesamiento de cola
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