クロスサーバーメッセージング

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

通常、ゲーム内のコードは実行されているサーバーまたはクライアントにのみ影響を与えることができますが、異なるサーバー間で通信を行いたい状況もあります。これには以下のようなケースが含まれます:

  • グローバルアナウンスメント — "ユーザーが特別なアイテムを見つけました!" などのアナウンスをすべてのゲームサーバーに送信します。
  • リアルタイムサーバーブラウザ — ゲームのすべてのサーバーとその中にいるユーザーのリストをコンパイルし(毎分更新)、最大20サーバーでそのリストを表示します。

ゲームでクロスサーバーメッセージングをサポートするには、MessagingService を使用します。また、実装する前にクロスサーバーメッセージングがどのように機能するかを確認するために、テレポーテーションプレイグラウンド サンプルゲームも利用できます。最後に、外部ツールを使用してクロスサーバー通信を探索するには、こちらをご覧ください。

クロスサーバーメッセージングの設定

クロスサーバーメッセージングを有効にするには、複数のサーバーからアクセス可能なカスタマイズされたメッセージチャネルである トピック を設定する必要があります。トピックを作成した後、ユーザーをサブスクライブ してそのトピックにメッセージを受信させ、トピックへのメッセージの公開 を有効にすることができます。

メッセージを受信するためのユーザーをサブスクライブする

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() を使用して特定のトピックに一致させてメッセージを公開します。次のコードサンプルでは、MessagingService:PublishAsync() を使用してユーザーが新しいサーバーに参加したときにすべてのユーザーに通知します。これには、ユーザーの表示名を表す Player.Name と、実行中のゲームサーバーインスタンスの一意の識別子である JobId が含まれます。


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 .. " は 'JobId' が " .. game.JobId .. " のサーバーに参加しました"
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。