通常,体验内的代码只能影响它在运行的服务器或客户端,但有可能需要您想要其他服务器通过不同的服务器之间通信:
- 全球公告 — 向所有服务器发送“用户发现了一个特殊物品!”等公告。
- 实时服务器浏览器 — 编译所有体验服务器的列表,并显示其中的人员(每分钟更新),以及在最多 20 个服务器上显示列表。
您可以使用 MessagingService 在您的体验中支持跨服务器消息。您还可以使用示例体验 Teleportation Playground 来查看在您实现它之前如何工作。最后,请参阅 在线 体验1>在线通信1>使用外部工具。
跨服务器通信设置
要启用跨服务器消息,您必须设置一个 主题 which是一个自定义消息频道,可以从多个服务器访问。在创建一个主题后,您可以 订阅用户 到主题来接收消息并 发布消息 到主题。
订阅用户以接收消息
使用 MessagingService:SubscribeAsync() 将用户订阅到一个主题,指定一个回调函数,检测发布到该主题的消息。例如,以下代码示例订阅所有用户到一个 FriendServerEvent 主题,当任何用户传送到不同的服务器时检查消息。
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- 订阅主题
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- 玩家的祖先变更主题订阅
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
发布消息
使用 MessagingService:PublishAsync() 来匹配特定主题并发布消息到它。例如,下面的代码示例使用 PublishAsync() 来通知所有用户,当用户加入新服务器时,包括 <
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- 发布到主题
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)