คิว (queue) เป็นโครงสร้างข้อมูลเชิงเส้นที่มีการรวบรวมรายการซึ่งปฏิบัติตามหลักการแรกเข้า-ออกแรก (FIFO) หรือจัดอันดับสมาชิกตามเกณฑ์ที่กำหนดไว้ล่วงหน้า หน่วยความจำ รองรับคิว 2 ประเภท คือ คิวปกติ และ คิวตามลำดับความสำคัญ ซึ่งทั้งสองประเภทมีชุดฟังก์ชันเดียวกันสำหรับการเริ่มต้นคิวว่าง เพิ่มข้อมูลลงในคิว อ่านข้อมูลจากคิว และลบข้อมูลจากคิว
คิวสำหรับหน่วยความจำมีประโยชน์ในการประมวลผลตามลำดับและการจัดเก็บข้อมูลผู้ใช้ เช่น ระดับทักษะ เพื่อช่วยในการจับคู่ตามเกณฑ์ที่คุณต้องการ ตัวอย่างเช่น คุณสามารถเพิ่มสถานที่ล็อบบี้เป็นสถานที่เริ่มต้นของเกมของคุณ ใช้คิวสำหรับหน่วยความจำเป็นระบบจัดเก็บข้อมูลผู้ใช้ที่เข้าถึงได้จากหลายเซิร์ฟเวอร์ จัดการลำดับการวางของผู้ใช้โดยใช้คิว และโทรเฟรสมาจับคู่ผู้ใช้ที่เสร็จสิ้นไปยังสถานที่หลักของเกมของคุณ
รับคิว
เพื่อที่จะได้รับคิว ให้เรียก MemoryStoreService:GetQueue() โดยใช้ ชื่อ ซึ่งเป็นชื่อทั่วโลกภายในเกมสำหรับสคริปต์ใดๆ ที่เข้าถึงได้ และยังมี เวลาดูไม่ได้ แบบเลือกได้ในหน่วยวินาที ซึ่งป้องกันไม่ให้มีการประมวลผลรายการคิวซ้ำ เวลาดูไม่ได้เริ่มต้นที่ 30 วินาทีหากคุณปล่อยให้ว่างไว้เหมือนในตัวอย่างโค้ดด้านล่าง
Getting an Empty Queuelocal MemoryStoreService = game:GetService("MemoryStoreService")local queue = MemoryStoreService:GetQueue("Queue1")
เมื่อคิวกำลังประมวลผลรายการในนั้น เวลาดูไม่ได้นั้นจะถูกนำไปใช้กับรายการ ทำให้มันไม่สามารถประมวลผลโดยเซิร์ฟเวอร์อื่นได้ เนื่องจากเซิร์ฟเวอร์หลายตัวสามารถอัปเดตคิวได้พร้อมกัน แม้ว่าจะคาดหวังว่าจะทำงานอ่านและลบรายการให้เสร็จภายในระยะเวลาเวลาดูไม่ได้ หากเกิดข้อผิดพลาดที่ทำให้รายการยังคงอยู่ในคิวหลังจากเวลาดูได้หมดลง รายการจะกลับมามองเห็นได้สำหรับการประมวลผลอีกครั้ง ในการทำเช่นนี้ เวลาดูไม่ได้จะรับประกันว่าทุกรายการในคิวยังคงสามารถประมวลผลได้แม้ว่าจะเกิดปัญหาที่ไม่คาดคิด
หลังจากที่คุณได้รับคิวแล้ว ให้เรียกใช้งานฟังก์ชันใดฟังก์ชันหนึ่งต่อไปนี้:
| ฟังก์ชัน | การดำเนินการ |
|---|---|
| MemoryStoreQueue:AddAsync() | เพิ่ม รายการใหม่ลงในคิว |
| MemoryStoreQueue:ReadAsync() | อ่าน รายการหนึ่งหรือหลายรายการจากคิวเป็นการดำเนินการเดียว |
| MemoryStoreQueue:RemoveAsync() | ลบ รายการหนึ่งหรือหลายรายการที่เคยอ่านจากคิว |
| MemoryStoreQueue:GetSizeAsync() | รับ จำนวนรายการในคิว |
เพิ่มข้อมูล
ในการเพิ่มรายการใหม่ลงในคิว ให้เรียก MemoryStoreQueue:AddAsync() โดยใช้ค่าของรายการ เวลาหมดอายุในวินาที และความสำคัญของรายการเป็นตัวเลือก หากคุณต้องการให้คิวของคุณอยู่ในลำดับ FIFO คุณสามารถปล่อยให้ความสำคัญว่างหรือระบุเป็น 0
Adding Data to a Queue
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 ของรายการ เพื่อรับประกันว่าคุณจะไม่ประมวลผลรายการมากกว่าหนึ่งครั้ง ในการจับและตอบสนองต่อรายการทั้งหมดที่ถูกเพิ่มอย่างต่อเนื่องลงในคิว ให้รวม ลูป เช่นเดียวกับตัวอย่างโค้ดด้านล่าง:
Reading and Removing Data from Queue with 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
-- ลูปการประมวลผลคิว
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
รับขนาด
ในการรับจำนวนรายการในคิว ให้เรียก MemoryStoreQueue:GetSizeAsync(). วิธีการนี้มีบูลีน خيارًاเพื่อเลือก excludeInvisible. เมื่อมันเป็น true รายการที่มองไม่เห็นจะถูกยกเว้นจากการนับผลลัพธ์ที่คืนกลับ บูลีนนี้เริ่มต้นที่ false.
Getting the Size of a Queue
local MemoryStoreService = game:GetService("MemoryStoreService")
local queue = MemoryStoreService:GetQueue("Queue1")
local addSuccess, addError = pcall(function()
return queue:AddAsync("User_1234", 30, 1)
end)
if not addSuccess then
warn(addError)
end
local size
local success, sizError = pcall(function()
size = queue:GetSizeAsync(true)
end)
if success then
print(size)
else
warn(sizeError)
end