Thông thường, mã trong một trò chơi chỉ có thể ảnh hưởng đến máy chủ hoặc các client mà nó đang chạy trên đó, nhưng có thể có những tình huống mà bạn muốn các máy chủ khác nhau giao tiếp với nhau, bao gồm:
- Thông báo toàn cầu — Gửi thông báo như "Một người dùng đã tìm thấy một vật phẩm đặc biệt!" đến tất cả các máy chủ của trò chơi.
- Trình duyệt máy chủ thời gian thực — Biên soạn danh sách tất cả các máy chủ của trò chơi và ai đang ở trong chúng (được cập nhật mỗi phút) và hiển thị danh sách trên tối đa 20 máy chủ.
Bạn có thể hỗ trợ nhắn tin giữa các máy chủ trong trò chơi của bạn bằng cách sử dụng MessagingService. Bạn cũng có thể sử dụng trò chơi mẫu Teleportation Playground để xem cách nhắn tin giữa các máy chủ hoạt động trước khi bạn triển khai nó. Cuối cùng, xem tại đây để khám phá giao tiếp giữa các máy chủ sử dụng các công cụ bên ngoài.
Thiết lập nhắn tin giữa các máy chủ
Để kích hoạt nhắn tin giữa các máy chủ, bạn phải thiết lập một chủ đề mà là một kênh tin nhắn tùy chỉnh có thể truy cập từ nhiều máy chủ. Sau khi bạn tạo một chủ đề, bạn có thể đăng ký người dùng cho chủ đề để nhận tin nhắn và kích hoạt đăng tin nhắn cho chủ đề.
Đăng ký người dùng để nhận tin nhắn
Sử dụng MessagingService:SubscribeAsync() để đăng ký người dùng cho một chủ đề và chỉ định một hàm callback phát hiện các tin nhắn được công bố cho chủ đề đó. Ví dụ, đoạn mã dưới đây đăng ký tất cả người dùng cho một chủ đề FriendServerEvent nhận tin nhắn khi bất kỳ người dùng nào được chuyển đến một máy chủ khác.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Đăng ký cho chủ đề
local subscribeSuccess, subscribeConnection = pcall(function()
return MessagingService:SubscribeAsync(MESSAGING_TOPIC, function(message)
print(message.Data)
end)
end)
if subscribeSuccess then
-- Hủy đăng ký khỏi chủ đề khi thay đổi tổ tiên của người chơi
player.AncestryChanged:Connect(function()
subscribeConnection:Disconnect()
end)
end
end)
Đăng tin nhắn
Sử dụng MessagingService:PublishAsync() để khớp với một chủ đề cụ thể và đăng tin nhắn cho nó. Ví dụ, đoạn mã dưới đây sử dụng PublishAsync() để thông báo cho tất cả người dùng khi một người dùng tham gia vào một máy chủ mới, bao gồm Player.Name đại diện cho tên hiển thị của người dùng và JobId, một định danh duy nhất cho phiên bản máy chủ trò chơi đang chạy.
local MessagingService = game:GetService("MessagingService")
local Players = game:GetService("Players")
local MESSAGING_TOPIC = "FriendServerEvent"
Players.PlayerAdded:Connect(function(player)
-- Đăng tin cho chủ đề
local publishSuccess, publishResult = pcall(function()
local message = player.Name .. " đã tham gia máy chủ với 'JobId' là " .. game.JobId
MessagingService:PublishAsync(MESSAGING_TOPIC, message)
end)
if not publishSuccess then
print(publishResult)
end
end)