Normalde, bir oyundaki kod yalnızca çalıştığı sunucu veya istemcileri etkileyebilir; ancak, farklı sunucuların birbirleriyle iletişim kurmasını istediğiniz bazı durumlar olabilir. Bunlar arasında:
- Küresel Duyurular — "Bir kullanıcı özel bir eşya buldu!" gibi duyuruları oyunun tüm sunucularına gönderin.
- Gerçek Zamanlı Sunucu Tarayıcı — Oyunun tüm sunucularının bir listesini derleyin ve içinde kimlerin bulunduğunu (her dakika güncellenir) gösterin; liste maksimum 20 sunucuda görüntülenir.
Oyununuzda sunucu arası mesajlaşmayı MessagingService kullanarak destekleyebilirsiniz. Ayrıca, sunucu arası mesajlaşmanın nasıl çalıştığını görmek için Teleportation Playground örnek oyununu kullanabilirsiniz. Son olarak, dış araçlar kullanarak sunucu arası iletişimi keşfetmek için buraya bakın.
Sunucu arası mesajlaşma kurulumu
Sunucu arası mesajlaşmayı etkinleştirmek için, birden fazla sunucudan erişilebilen özel bir mesaj kanalı olan bir konu oluşturmanız gerekir. Bir konu oluşturduktan sonra, kullanıcıları mesajları almak için kaydetme işlemine tabi tutabilir ve konuya mesaj yayınlama işlemini gerçekleştirebilirsiniz.
Kullanıcıları mesajları almak için kaydetme
Kullanıcıları bir konuya kaydetmek ve o konuya yayımlanan mesajları algılayan bir geri çağırma işlevi belirtmek için MessagingService:SubscribeAsync() kullanın. Örneğin, aşağıdaki kod örneği, herhangi bir kullanıcının farklı bir sunucuya taşındığında mesaj alan bir FriendServerEvent konusuna tüm kullanıcıları kaydeder.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Konuya abone olun
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Oyuncu soy bağı değiştiğinde konudan aboneliği iptal et
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Mesajları yayınlama
Belirli bir konuya karşılık gelmek ve ona bir mesaj yayınlamak için MessagingService:PublishAsync() kullanın. Örneğin, aşağıdaki kod örneği, bir kullanıcının yeni bir sunucuya katıldığında tüm kullanıcıları bilgilendirmek için PublishAsync() kullanır; bu, kullanıcının görüntü adını temsil eden Player.Name ve çalışan oyun sunucusu örneği için benzersiz bir tanımlayıcı olan JobId içerir.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Konuya yayın yap
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " 'JobId' ile sunucuya katıldı " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)