Sunucu arası mesajlaşma

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Normalde, deneyim içindeki kod sadece çalıştığı sunucuyu veya istemcileri etkileyebilir, ancak farklı sunucuların birbiriyle iletişim kurmasını istediğiniz durumlar olabilir:

  • Küresel Duyurular — "Bir kullanıcı özel bir öğe buldu!" gibi duyuruları tüm deneyim sunucularına gönderin.
  • Gerçek Zamanlı Sunucu Tarayıcısı — Tüm deneyim sunucularının bir listesini ve içinde kim olduğunu (her dakika güncellenir) derleyin ve listeyi maksimum 20 sunucuda görüntüleyin.

Deneyiminizde MessagingService kullanarak sunucu arası mesajlaşmayı destekleyebilirsiniz.Ayrıca, Işınlanma Oyun Alanı örnek deneyimini kullanarak, bunu uygulamadan önce nasıl çok sunuculu iletişimin çalıştığını görebilirsiniz.Son olarak, burada dışarıdan araçlar kullanarak sunucu arası iletişimi keşfetmek için görün.

Çapraz sunucu mesajlaşma yapılandırması

Çapraz sunucu iletişimini etkinleştirmek için, çok sayıda sunucudan erişilebilen özelleştirilmiş bir mesaj kanalı olan bir konu ayarlamanız gerekir.Bir konu oluşturduktan sonra, mesaj almak ve konuya mesaj yayınlama etkinleştirmek için konuya abone olabilirsiniz ve konuya mesaj yayınlama etkinleştirmek için konuya abone olabilirsiniz.

Kullanıcıların mesaj almasına abone olun

Kullanıcıları bir konuya abone etmek ve bu konuya yayınlanan mesajları tespit eden bir geri çağırma işlevi belirtmek için MessagingService:SubscribeAsync() kullanın ve bir konuya yayınlanan mesajları tespit eden bir geri çağırma işlevi belirtin.Örneğin, aşağıdaki kod örneği, bir kullanıcı başka bir sunucuya ışınlandığında mesaj alan bir FriendServerEvent konusuna tüm kullanıcıları abone eder.


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 atasözü değişikliği üzerine konudan çıkma
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)

Mesajları yayınla

Belirli bir konuyla eşleşmek ve buna 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, kullanıcının görüntü adını temsil eden Player.Name ve çalışan deneyim sunucu istemcisi için benzersiz bir tanımlayıcı olan JobId.


local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Konuya yayınla
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " joined server with 'JobId' of " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)