A 큐 는 선입선출(FIFO) 원칙을 따르거나 미리 정의된 기준에 따라 요소를 우선시하는 선형 데이터 구조이며,메모리 저장소는 FIFO 일반 큐와 우선 순위 큐의 두 유형을 지원합니다.둘 모두 빈 큐를 초기화하고, 큐에 데이터를 추가하고, 큐에서 데이터를 읽고, 큐에서 데이터를 제거하는 동일한 함수 집합을 공유합니다.
메모리 저장소 큐는 사용자 정보(예: 스킬 레벨)를 기반으로 원하는 조건에 따라 매치메이킹을 용이하게 하기 위해 순서 기반 처리 및 저장에 유용합니다.예를 들어, 경험의 시작 장소로 로비 장소를 추가하고, 여러 서버에서 액세스할 수 있는 메모리 저장소 큐를 중앙화된 사용자 정보 저장소로 사용하고, 큐를 사용하는 사용자의 배치 순서를 관리하고, 매치메이킹을 완료한 사용자를 경험의 주요 장소로 순간이동할 수 있습니다.
큐 받기
큐를 가져오려면 경험 내에서 모든 스크립트에 액세스할 수 있는 MemoryStoreService:GetQueue() 및 선택적인 투명성 제한 시간 초(동일한 큐 아이템중복 처리를 방지)를 사용하여 name 으로 호출하고 초 단위의 선택적 투명성 제한 시간을 사용하여 동일한 큐 항목의 중복 처리를 방지합니다.기본적으로 투명화 시간 제한은 다음 코드 샘플처럼 비워두면 30초입니다.
빈 큐 가져오기
local MemoryStoreService = game:GetService("MemoryStoreService")local queue = MemoryStoreService:GetQueue("Queue1")
큐에서 아이템을 처리할 때 투명화 제한 시간이 아이템에 적용되어 다른 서버에서 처리되지 않도록 하며, 여러 서버가 동시에 큐를 업데이트할 수 있기 때문입니다.투명화 제한 시간 동안 항목에 대한 읽기 및 제거 작업을 모두 완료할 것으로 예상되지만, 제한 시간이 경과한 후에도 항목이 큐에 남아 처리되지 않는 오류가 발생하면 항목이 다시 표시되어 처리됩니다.이렇게 하면 투명화 제한 시간이 예기치 않은 문제가 발생해도 대기열의 모든 항목이 여전히 처리될 수 있도록 보장합니다.
큐를 받은 후, 다음 함수 중 하나를 호출하여 큐에서 데이터를 읽거나 쓸 수 있습니다:
함수 | 액션 |
---|---|
MemoryStoreQueue:AddAsync() | 새 항목을 큐에 추가합니다. |
MemoryStoreQueue:ReadAsync() | 읽기 큐에서 단일 작업으로 하나 이상의 항목을 읽습니다. |
MemoryStoreQueue:RemoveAsync() | 제거 큐에서 이전에 읽은 하나 이상의 항목을 제거합니다. |
데이터 추가
큐에 새 항목을 추가하려면 항목 값, 초 단위 만료 시간 및 선택적 아이템우선 순위를 사용하여 MemoryStoreQueue:AddAsync()를 호출하십시오.큐를 FIFO 순서에 유지하려면 우선순위를 비워 두거나 0를 패스할 수 있습니다.
큐에 데이터 추가
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
데이터 읽기 및 제거
한 번에 큐에서 하나 이상의 항목을 읽으려면 MemoryStoreQueue:ReadAsync() 를 호출하여 읽은 항목을 나타내는 id를 반환합니다.아이템 처리를 완료하면 MemoryStoreQueue:RemoveAsync() 를 즉시 호출하여 큐에서 해당 아이템을 id 로 삭제합니다.이렇게 하면 항목을 한 번 이상 처리하지 않도록 보장합니다.계속해서 큐에 추가되는 모든 항목을 캡처하고 응답하려면 다음 코드 샘플과 같은 루프를 포함하십시오:
루프로 큐에서 데이터 읽기 및 제거
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
-- 대기 처리 루프
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