Biasanya, kode dalam sebuah game hanya dapat memengaruhi server atau klien yang sedang berjalan, tetapi mungkin ada situasi di mana Anda ingin server yang berbeda saling berkomunikasi, termasuk:
- Pengumuman Global — Kirim pengumuman seperti "Seorang pengguna menemukan item spesial!" ke semua server game.
- Browser Server Waktu Nyata — Kompilasi daftar semua server game dan siapa saja yang berada di dalamnya (diperbarui setiap menit) dan tampilkan daftar tersebut di maksimum 20 server.
Anda dapat mendukung pesan antar server di game Anda menggunakan MessagingService. Anda juga dapat menggunakan game sampel Teleportation Playground untuk melihat bagaimana pesan antar server bekerja sebelum Anda mengimplementasikannya. Terakhir, lihat di sini untuk menjelajahi komunikasi antar server menggunakan alat eksternal.
Pengaturan pesan antar server
Untuk mengaktifkan pesan antar server, Anda harus menyiapkan topik yang merupakan saluran pesan yang disesuaikan dan dapat diakses dari beberapa server. Setelah Anda membuat topik, Anda dapat melanggan pengguna ke topik tersebut untuk menerima pesan dan memungkinkan menerbitkan pesan ke topik.
Melanggan pengguna untuk menerima pesan
Gunakan MessagingService:SubscribeAsync() untuk melanggan pengguna ke sebuah topik dan tentukan fungsi callback yang mendeteksi pesan yang diterbitkan ke topik tersebut. Misalnya, contoh kode berikut melanggan semua pengguna ke topik FriendServerEvent yang menerima pesan ketika pengguna mana pun dipindahkan ke server yang berbeda.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Melanggan ke topik
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Lepaskan langganan dari topik saat perubahan keturunan pemain
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Menerbitkan pesan
Gunakan MessagingService:PublishAsync() untuk mencocokkan topik tertentu dan menerbitkan pesan ke dalamnya. Misalnya, contoh kode berikut menggunakan MessagingService:PublishAsync() untuk memberi tahu semua pengguna ketika seorang pengguna bergabung dengan server baru, termasuk Player.Name yang mewakili nama tampilan pengguna dan DataModel.JobId, pengidentifikasi unik untuk instance server game yang sedang berjalan.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Menerbitkan ke topik
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " bergabung dengan server dengan 'JobId' " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)