Normalement, le code dans une expérience ne peut affecter que le serveur ou les clients sur lequel il s'exécute, mais il peut y avoir des situations où vous voulez que différents serveurs se communiquent entre eux, y compris :
- Annonces globales — Envoyez des annonces telles que « Un utilisateur a trouvé un itemspécial ! » à tous les serveurs de l'expérience.
- Navigateur de serveur en temps réel — Compiler une liste de tous les serveurs de l'expérience et qui y sont (mise à jour toutes les minutes) et afficher la liste sur un maximum de 20 serveurs.
Vous pouvez prendre en charge le messagerie entre serveurs dans votre expérience en utilisant MessagingService .Vous pouvez également utiliser l'expérience de jeu de téléportation Teleportation Playground pour voir comment fonctionne le messagerie entre serveurs avant de l'implémenter.Enfin, voir ici pour explorer la communication entre serveurs en utilisant des outils externes.
Configuration du messagerie entre serveurs
Pour activer le messagerie entre serveurs, vous devez configurer un sujet qui est un canal de message personnalisé accessible à partir de plusieurs serveurs.Après avoir créé un sujet, vous pouvez souscrire aux utilisateurs au sujet pour recevoir des messages et activer la publication de messages au sujet.
S'abonner aux utilisateurs pour recevoir des messages
Utilisez MessagingService:SubscribeAsync() pour souscrire des utilisateurs à un sujet et spécifier une fonction de rappel qui détecte les messages publiés sur ce sujet.Par exemple, l'exemple de code suivant s'abonne à tous les utilisateurs à un sujet FriendServerEvent qui reçoit des messages lorsque tout utilisateur est téléporté sur un autre serveur.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- S'abonner au sujet
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Désabonner du sujet lors du changement de l'ascendance du joueur
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Publier des messages
Utilisez MessagingService:PublishAsync() pour correspondre à un sujet spécifique et publier un message à celui-ci.Par exemple, l'exemple de code suivant utilise PublishAsync() pour informer tous les utilisateurs lorsqu'un utilisateur rejoint un nouveau serveur, y compris le Player.Name représentant le nom d'affichage de l'utilisateur et le JobId, un identifiant unique pour l'instance du serveur d'expérience en cours d'exécution.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Publier dans le sujet
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)