Normalerweise kann der Code innerhalb eines Spiels nur den Server oder die Clients betreffen, auf denen er ausgeführt wird, aber es kann Situationen geben, in denen Sie möchten, dass verschiedene Server miteinander kommunizieren, einschließlich:
- Globale Ankündigungen — Senden Sie Ankündigungen wie "Ein Benutzer hat einen speziellen Gegenstand gefunden!" an alle Server des Spiels.
- Echtzeit-Server-Browser — Stellen Sie eine Liste aller Server des Spiels zusammen und zeigen Sie an, wer sich darauf befindet (alle 60 Sekunden aktualisiert) und zeigen Sie die Liste auf maximal 20 Servern an.
Sie können Messaging zwischen Servern in Ihrem Spiel mithilfe von MessagingService unterstützen. Sie können auch das Teleportation Playground Beispielspiel verwenden, um zu sehen, wie das Messaging zwischen Servern funktioniert, bevor Sie es implementieren. Schließlich sehen Sie hier nach, um die serverübergreifende Kommunikation mit externen Tools zu erkunden.
Einrichtung des Messaging zwischen Servern
Um das Messaging zwischen Servern zu aktivieren, müssen Sie ein Thema einrichten, das einen benutzerdefinierten Nachrichtenkanal darstellt, der von mehreren Servern aus zugänglich ist. Nachdem Sie ein Thema erstellt haben, können Sie Benutzer abonnieren, um Nachrichten zu diesem Thema zu empfangen und Nachrichten zu veröffentlichen an das Thema.
Benutzer abonnieren, um Nachrichten zu empfangen
Verwenden Sie MessagingService:SubscribeAsync(), um Benutzer für ein Thema zu abonnieren und eine Callback-Funktion anzugeben, die erkennt, wenn Nachrichten an dieses Thema veröffentlicht werden. Zum Beispiel abonniert der folgende Code-Schnipsel alle Benutzer für ein FriendServerEvent-Thema, das Nachrichten empfängt, wenn ein Benutzer zu einem anderen Server teleportiert wird.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Themen abonnieren
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Vom Thema abmelden, wenn sich die Ahnenschaft des Spielers ändert
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Nachrichten veröffentlichen
Verwenden Sie MessagingService:PublishAsync(), um mit einem bestimmten Thema übereinzustimmen und eine Nachricht zu veröffentlichen. Zum Beispiel verwendet der folgende Code-Schnipsel PublishAsync(), um alle Benutzer zu benachrichtigen, wenn ein Benutzer einen neuen Server betritt, einschließlich des Player.Name, der den Anzeigenamen des Benutzers darstellt, und die JobId, eine eindeutige Kennung für die laufende Spielserverinstanz.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Themen veröffentlichen
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " trat dem Server mit 'JobId' von " .. game.JobId bei
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)