คิว คือโครงสร้างข้อมูลเชิงเส้นที่มีคอลเลกชันของรายการที่เป็นไปตามหลักการ FIFO หรือให้ความสําคัญกับองค์ประกอบตามเกณฑ์ที่กําหนดไว้ล่วงหน้า สถานที่เก็บหน่วยความจำ สนับสนุนสองประเภทของคิวคือ FIFO คิวปกติ และ คิวลําดับความสําคัญทั้งสองประเภทแบ่งปันชุดฟังก์ชันเดียวกันสำหรับการเริ่มต้นคิวว่างเปล่า เพิ่มข้อมูลลงในคิว อ่านข้อมูลจากคิว และลบข้อมูลออกจากคิว
คิวที่เก็บหน่วยความจํามีประโยชน์สําหรับการประมวลผลและจัดเก็บข้อมูลผู้ใช้ เช่น ระดับทักษะ เพื่ออำนวยความสะดวกในการจับคู่ตามเกณฑ์ที่ต้องการตัวอย่างเช่น คุณสามารถเพิ่มสถานที่ล็อบบี้เป็นจุดเริ่มต้นของประสบการณ์ของคุณ ใช้คิวเก็บข้อมูลหน่วยความจำเป็นเป็นระบบจัดเก็บข้อมูลผู้ใช้แบบกลางที่สามารถเข้าถึงได้โดยหลายเซิร์ฟเวอร์ จัดลำดับความสำคัญของผู้ใช้ที่ใช้คิว และเทเลพอร์ตผู้ใช้ที่เสร็จสิ้นการจับคู่ไปยังสถานที่หลักของประสบการณ์ของคุณ
รับคิว
เพื่อรับคิว โทร MemoryStoreService:GetQueue() ด้วยชื่อ **** ซึ่งเป็นทั่วถึงภายในประสบการณ์สำหรับสคริปต์ใดๆ การเข้าถึงไอเท็ม ในวินาที ซึ่งป้องกันการประมวลผลซ้ำของรายการคิวเดิมเวลาหมดอายุการมองไม่เห็นคือ 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