Normalmente, o código dentro de uma experiência só pode afetar o servidor ou clientes em que ela está executando, mas pode haver situações em que você deseja que diferentes servidores se comuniquem entre si, incluindo:
- Anúncios Globais — Envie anúncios, como "Um usuário encontrou um item especial!" para todos os servidores da experiência.
- Navegador de Servidor em Tempo Real — Compile uma lista de todos os servidores de experiência e quem está neles (atualizado a cada minuto) e exibir a lista em um máximo de 20 servidores.
Você pode manter a mensageria entre servidores em sua experiência usando MessagingService. Você também pode usar a experiência de exemplo Teleportation Playground para ver como a mensageria entre servidores funciona antes de você implementá-la. Por fim, veja aqui para explorar a comunicação entre servidores usando ferramentas de terceiros.
Configuração de Mensageria Entre Servidores
Para habilitar a mensageria entre servidores, você deve configurar um tópico que é um canal de mensagem personalizado que é acessível de vários servidores. Depois de criar um tópico, você pode inscrever usuários no tópico para receber mensagens e ativar a publicação de mensagens no tópico.
Inscrevendo Usuários para Receber Mensagens
Use MessagingService:SubscribeAsync() para inscrever os usuários em um tópico e especificar uma função de chamada que detecta a publicação de mensagens para esse tópico. Por exemplo, o seguinte código de exemplo subscreve todos os usuários para um tópico Evento de Amigo do Servidor que recebe mensagens quando qualquer usuário é teletransportado para um servidor diferente.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Se inscreva no tópico
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Desinscreva-se do tópico ao alterar a ancestralidade do jogador
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Publicando Mensagens
Use MessagingService:PublishAsync() para correspondar a um tópico específico e publicar uma mensagem nele. Por exemplo, o seguinte código de exemplo usa PublishAsync() para notificar todos os usuários quando um
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Publicar para o tópico
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)