MessagingService 允許相同體驗的伺服器通過主題實時互相通信(少於 1 秒)。主題是開發者定義的字符串(1–80 個字符),伺服器用於發送和接收消息。
傳送是最佳努力,不保證成功。請確保架構設計能讓傳送失敗不會造成重大影響。
跨伺服器消息傳遞 探討了如何在伺服器之間進行更詳細的通信。
如果你想向實時遊戲伺服器發佈臨時消息,可以使用 Open Cloud APIs。
限制
請注意,這些限制可能會變更。
限制 | 最大值 |
---|---|
消息大小 | 1kB |
每個遊戲伺服器發送的消息 | 每分鐘 600 + 240 * (此遊戲伺服器中的玩家數量) |
每個主題接收到的消息 | 每分鐘 (40 + 80 * 伺服器數量) |
整個遊戲接收到的消息 | 每分鐘 (400 + 200 * 伺服器數量) |
每個遊戲伺服器允許的訂閱數量 | 20 + 8 * (此遊戲伺服器中的玩家數量) |
每個遊戲伺服器的訂閱請求 | 每分鐘 240 次請求 |
概要
方法
每當有消息推送到主題時,請調用提供的回調。
開始監聽指定的主題。
屬性
方法
PublishAsync
此函數將提供的消息發送給所有訂閱該主題的用戶,觸發他們註冊的回調。
在消息被後端接收之前會暫停(yield)。
參數
確定消息的發送位置。
要包含在消息中的數據。
返回
SubscribeAsync
此函數註冊一個回調來開始監聽指定的主題。 回調在主題接收到消息時被調用。可以對同一主題多次調用它。
回調
回調以單一參數被調用,該參數是一個表,包含以下 項目:
字段 | 摘要 |
---|---|
數據 | 開發者提供的有效載荷 |
發送時間 | 消息發送的 Unix 時間戳(以秒為單位) |
在訂閱正確註冊之前會暫停,並返回一個 連接對象。
要取消訂閱,請在返回的對象上調用 Disconnect()。 一旦調用,回調將不會再次被調用。 終止包含連接的腳本也會導致底層連接被取消訂閱。
另請參見 MessagingService:PublishAsync(),該函數 將提供的消息發送給所有訂閱該主題的用戶,觸發他們的 註冊回調。
參數
返回
可用於從主題取消訂閱的連接。
範例程式碼
'這個範例展示了如何使用 MessagingService:SubscribeAsync()
來監聽遊戲宇宙中的跨伺服器聊天主題。
當玩家加入時,範例會訂閱主題
player-<player.UserId>。當使用此主題發送消息時,
連接的回調執行並打印 收到消息來自 <player.Name>。
當玩家的
家譜變更 時,它也會斷開連接。
為了使這正常工作,它必須放置在伺服器 Script 中。'
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local function onPlayerAdded(player)
--訂閱 該主題
local topic = "player-" .. player.UserId
local connection = MessagingService:SubscribeAsync(topic, function(message)
print("收到 來自", player.Name, message.Data)
end)
player.AncestryChanged:Connect(function()
-- 退訂該主題
connection:Disconnect()
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)