Mensageria entre servidores

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Normalmente, o código dentro de uma experiência só pode afetar o servidor ou os clientes em que 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 da experiência e quem está neles (atualizada a cada minuto) e exiba a lista em um máximo de 20 servidores.

Você pode suportar mensageria entre servidores na sua experiência usando MessagingService .Você também pode usar a experiência de amostra do Campo de Jogos de Teletransporte para ver como a mensageria entre servidores funciona antes de implementá-la.Por fim, veja aqui para explorar a comunicação entre servidores usando ferramentas externas.

Configuração de mensageria entre servidores

Para habilitar a mensageria entre servidores, você deve configurar um tópico que é um canal de mensagens personalizado que é acessível de múltiplos servidores.Depois de criar um tópico, você pode inscrever usuários no tópico para receber mensagens e habilitar publicar mensagens no tópico.

Inscreva usuários para receber mensagens

Use MessagingService:SubscribeAsync() para inscrever usuários em um tópico e especificar uma função de retorno que detecta mensagens publicadas nesse tópico.Por exemplo, o seguinte código de exemplo inscreve todos os usuários em um tópico FriendServerEvent que recebe mensagens quando qualquer usuário for teletransportado para um servidor diferente.


local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Subscreva ao 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 após a mudança da ancestralidade do jogador
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)

Publicar mensagens

Use MessagingService:PublishAsync() para corresponder 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 usuário se junta a um novo servidor, incluindo o Player.Name que representa o nome de exibição do usuário e o JobId, um identificador exclusivo para a instância do servidor de experiência em execução.


local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Publicar no 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)