Normalmente, il codice all'interno di un'esperienza può influenzare solo il server o i client su cui si esegue, ma ci possono essere situazioni in cui desideri diversi server per comunicare tra loro, tra cui:
- Annunci globali — Invia annunci come "A user found a special Articolo!" a tutti i server dell'esperienza.
- Server di navigazione in tempo reale — Compila una lista di tutti i server dell'esperienza e chi è in loro (aggiornato ogni minuto) e visualizza la lista su un massimo di 20 server.
Puoi supportare il messaging cross-server nella tua esperienza utilizzando MessagingService . Puoi anche usare l'esempio di esperienza Teleportation Playground per vedere come funziona il messaging cross-server prima di implementarlo. Infine, vedi qui per esplorare la comunicazione cross-server utilizzando strumenti esterni.
Configurazione del messaggio tra server
Per abilitare il messaggio tra server, devi configurare un argomento che è un canale di messaggio personalizzato che è accessibile da più server. Dopo aver creato un argomento, puoi sottoscrivere utenti all'argomento per ricevere messaggi e abilitare pubblicare messaggi all'argomento.
Istruzioni per l'iscrizione
Usa MessagingService:SubscribeAsync() per sottoscrivere gli utenti a un argomento e specificare una funzione di richiamata che rileva i messaggi pubblicati in quel argomento. Ad esempio, il seguente esempio di codice sottoscrive tutti gli utenti a un argomento FriendServerEvent che riceve messaggi quando qualsiasi utente viene teletrasportato su un altro Server.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Iscriviti al tema
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Unisciti alla lista di distribuzione del tema quando cambia l'antenato
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Pubblicare Messaggi
Usa MessagingService:PublishAsync() per corrispondere a un argomento specifico e pubblicare un messaggio su di esso. Ad esempio, il seguente esempio di codice utilizza PublishAsync() per notificare tutti gli utenti quando
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Pubblica nel topic
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)