跨服務器通訊

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

通常,體驗內的代碼只能對它所在的服務器或客戶端產生影響,但可能有情況,您想要不同的服務器通過不同的服務器通信:

  • 全球公告 — 發送「發現特殊道具目」等公告給所有體驗的伺服器。
  • 即時服務器瀏覽器 — 列出所有體驗服務器的列表,並在最多 20 個服務器上顯示列表(每分鐘更新)。

您可以使用 MessagingService 支持服務器間的訊息傳送。您也可以使用 Teleportation Playground 示範體驗來查看服務器間的訊息傳送如何運作,然後您就可以實現它了。最後,請查看 這裡 來探索使用外部工具來探索服務器間通訊。

跨服務器通訊設定

要啟用跨服務器傳訊,您必須設置一個 主題 ,這是一個自訂訊息頻道,可以從多個服務器存取。 之後,您可以 訂閱用戶 主題來接收訊息並啟用 發布訊息 到主題。

訂閱用戶以收到訊息

使用 MessagingService:SubscribeAsync() 來訂閱用戶到一個主題,並指定一個回報函數,它會偵測到發布訊息到該主題的訊息。例如,下列代碼示例訂閱所有用戶到一個 FrenServerEvent 主題,當任何用戶傳送到不同的服務伺服器時。


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)