TÓM TẮT
Các backend máy chủ game đa dạng về giao thức theo bản chất của chúng: REST cho tài khoản người chơi và tìm trận, WebSocket cho trạng thái game thời gian thực, gRPC cho giao tiếp dịch vụ nội bộ. Hầu hết các công cụ API xử lý REST tốt và dừng lại ở đó. Bài viết này đề cập đến những gì các đội ngũ backend game thực sự cần từ công cụ API, vị trí hỗ trợ WebSocket và gRPC của Apidog, và những điều cần cân nhắc khi kiểm thử độ trễ.
nút
Giới thiệu
Phát triển backend máy chủ game có một vấn đề về giao thức mà hầu hết các công cụ API đều bỏ qua. Các điểm cuối REST của bạn xử lý hồ sơ người chơi, kho đồ và hàng chờ tìm trận. Các kết nối WebSocket của bạn mang trạng thái game thời gian thực, cập nhật vị trí và trò chuyện. Các dịch vụ gRPC của bạn xử lý giao tiếp nội bộ giữa các máy chủ logic game và trình quản lý phiên.
Mở Postman, và bạn có sự hỗ trợ REST xuất sắc. WebSocket? Về mặt kỹ thuật là có thể nhưng khá khó khăn. gRPC? Yêu cầu các giải pháp khắc phục hoặc một công cụ riêng biệt. Đến khi bạn đã thiết lập ba công cụ để kiểm thử một backend game, một nửa gánh nặng nhận thức của bạn dành cho công cụ thay vì logic backend thực tế.
Thách thức riêng biệt khác là độ trễ. Các backend game có yêu cầu độ trễ nghiêm ngặt mà các mẫu kiểm thử API truyền thống không thể hiện được. Thời gian phản hồi 200ms trên một điểm cuối bảng xếp hạng REST có thể chấp nhận được. Độ trễ 200ms trong đường dẫn truyền tin nhắn WebSocket là một trò chơi bị hỏng.
Bài viết này dành cho các kỹ sư backend tại các studio game và nhà phát triển độc lập đang xây dựng các backend nhiều người chơi, những người cần các công cụ API phù hợp với thực tế giao thức của ngăn xếp của họ.
Ngăn xếp giao thức backend game
Trước khi đánh giá các công cụ, việc lập bản đồ các mẫu sử dụng giao thức thực tế trong một backend game điển hình sẽ hữu ích.
REST: lớp quản trị
REST xử lý các phần phi trạng thái, có thể lưu vào bộ nhớ cache của backend game của bạn:
- Xác thực người chơi và quản lý phiên
- Hồ sơ người chơi và quản lý tài khoản
- Các điểm cuối kho đồ và kinh tế (mua vật phẩm, kiểm tra số dư)
- Các hoạt động hàng chờ tìm trận (xếp hàng, hủy xếp hàng, trạng thái)
- Bảng xếp hạng và thống kê
- Truy xuất cấu hình game (bản đồ, chỉ số vũ khí, chế độ game)
Các điểm cuối này thường có tần suất thấp hơn, dung sai cao hơn đối với độ trễ và ánh xạ rõ ràng tới ngữ nghĩa HTTP tiêu chuẩn. Các công cụ kiểm thử REST tiêu chuẩn xử lý tốt điều này.
WebSocket: trạng thái game thời gian thực
WebSocket xử lý giao tiếp hai chiều, tần số cao giúp các trò chơi nhiều người chơi hoạt động:
- Cập nhật vị trí và di chuyển của người chơi (có thể là 20-60 tin nhắn mỗi giây cho mỗi người chơi)
- Đồng bộ hóa trạng thái game
- Trò chuyện và thông báo trong game
- Cập nhật trạng thái tìm trận (đã tìm được, đang chờ, phòng đã sẵn sàng)
- Đẩy sự kiện từ máy chủ đến máy khách (hành động của người chơi khác, sự kiện game)
Kiểm thử kết nối WebSocket đòi hỏi các khả năng khác với kiểm thử REST: bạn cần thiết lập các kết nối bền vững, gửi tin nhắn theo các định dạng JSON hoặc nhị phân cụ thể, và quan sát các tin nhắn đến theo thời gian. Đó là một phiên làm việc, không phải một yêu cầu đơn lẻ.
gRPC: các dịch vụ nội bộ
Các backend game với kiến trúc hướng dịch vụ thường sử dụng gRPC cho giao tiếp nội bộ vì hiệu quả và kiểu dữ liệu mạnh mẽ của nó:
- Giao tiếp từ trình quản lý phiên đến máy chủ logic game
- Dịch vụ xác thực đến máy chủ game để xác thực token
- Thu thập sự kiện phân tích
- Các quy trình cập nhật bảng xếp hạng nội bộ
Kiểm thử gRPC yêu cầu nhập các tệp .proto định nghĩa các hợp đồng dịch vụ của bạn, sau đó gọi các phương thức với payload được định kiểu. Nó khác biệt cơ bản so với REST: không có URL để nhập, không có thân JSON để viết tùy ý.
Những gì các backend game thường không sử dụng từ các công cụ API
Các khung WebSocket nhị phân, MQTT (đối với một số backend game di động liên quan đến IoT), UDP (các giao thức dành riêng cho game). Hầu hết các công cụ API không bao gồm những điều này, và hầu hết các đội ngũ game cuối cùng phải viết các tiện ích kiểm thử tùy chỉnh cho việc kiểm thử giao thức cấp thấp nhất.
Kiểm thử REST cho backend game
Kiểm thử REST tiêu chuẩn là điều hiển nhiên. Đối với các backend game nói riêng, một vài điều quan trọng hơn bình thường.
Quản lý môi trường. Bạn đang kiểm thử với các máy chủ game cục bộ, các bản dựng phát triển, môi trường dàn dựng (staging) và sản xuất. Hỗ trợ biến môi trường cần phải vững chắc. Các URL cơ sở, token xác thực và các điểm cuối dành riêng cho từng khu vực đều thay đổi theo từng môi trường.
Xử lý tiêu đề xác thực. Các backend game thường sử dụng token JWT hoặc token phiên tùy chỉnh. Khả năng viết script để làm mới token – sử dụng một script tiền yêu cầu để lấy token và đưa nó vào các yêu cầu tiếp theo – giúp tiết kiệm đáng kể công việc thủ công trong quá trình kiểm thử.
Các yêu cầu chuỗi. Các luồng tìm trận thường yêu cầu nhiều yêu cầu tuần tự: tạo người chơi, xếp hàng tìm trận, thăm dò trạng thái, truy xuất chi tiết trận đấu. Việc nối chuỗi yêu cầu trong đó đầu ra của một yêu cầu cung cấp cho yêu cầu tiếp theo là rất quan trọng.
Các xác nhận kiểm thử. Xác thực rằng phản hồi bảng xếp hạng trả về người chơi theo đúng thứ tự, rằng một điểm cuối kho đồ trả về số lượng vật phẩm mong muốn sau khi mua, hoặc rằng một phản hồi lỗi bao gồm mã lỗi chính xác – tất cả những điều này đều cần script xác nhận.
Apidog xử lý tất cả những điều này. Các script JavaScript trước/sau yêu cầu, chèn biến môi trường, xác nhận kiểm thử và các quy trình yêu cầu chuỗi đều có sẵn mà không cần trả phí.
Kiểm thử WebSocket cho backend game
Đây là nơi sự khác biệt của công cụ trở nên quan trọng.
Kiểm thử WebSocket tốt trông như thế nào
Bạn cần:
- Thiết lập kết nối tới máy chủ WebSocket với các tiêu đề tùy chỉnh (token xác thực, ID phiên)
- Gửi một tin nhắn cụ thể hoặc một chuỗi tin nhắn
- Quan sát tất cả các tin nhắn đến theo thời gian
- Xác minh rằng các tin nhắn cụ thể đến sau các hành động cụ thể
- Kiểm thử độ ổn định kết nối: kết nối lại, nhịp tim (heartbeat), mất kết nối
Hỗ trợ WebSocket của Apidog
Apidog có giao diện kiểm thử WebSocket chuyên dụng. Nó không phải là một tính năng bổ sung hoặc một terminal thô – nó là một máy khách thực thụ.
Bạn chỉ định URL WebSocket (bao gồm ws:// hoặc wss://), thêm các tiêu đề kết nối (cho token xác thực hoặc khóa API) và kết nối. Sau khi kết nối, bạn có thể gửi tin nhắn và xem các tin nhắn đến trong chế độ xem cuộc trò chuyện được định dạng.
Đối với các backend game sử dụng JSON qua WebSocket (phần lớn), đây chính xác là những gì bạn cần. Gửi một tin nhắn { "type": "join_room", "room_id": "abc123" } và ngay lập tức xem phản hồi của máy chủ trong nhật ký tin nhắn.
Các khung WebSocket nhị phân: Nếu backend game của bạn gửi các tin nhắn được mã hóa nhị phân (ví dụ: protobuf qua WebSocket), Apidog hỗ trợ gửi thân dữ liệu thô. Bạn có thể gửi các payload được mã hóa hex hoặc base64 và nhận các khung nhị phân.
Tiêu đề kết nối: Các kết nối WebSocket trong game thường yêu cầu xác thực trong quá trình bắt tay (thông qua tham số truy vấn hoặc tiêu đề). Apidog hỗ trợ cả hai.
Các hạn chế cần biết: Kiểm thử WebSocket của Apidog chủ yếu dành cho kiểm thử thủ công, tương tác. Nó không được thiết kế để kiểm thử chuỗi tin nhắn tự động (xác nhận rằng trong vòng 500ms sau khi gửi tin nhắn A, bạn nhận được tin nhắn B). Để đạt được mức độ tự động hóa đó, bạn sẽ viết mã kiểm thử tùy chỉnh bằng cách sử dụng trực tiếp thư viện WebSocket.
Kiểm thử gRPC cho backend game
Kiểm thử gRPC yêu cầu định nghĩa dịch vụ của bạn. Apidog hỗ trợ kiểm thử gRPC bằng cách nhập các tệp .proto.
Quy trình làm việc
- Nhập (các) tệp
.protocủa bạn vào Apidog - Apidog phân tích cú pháp các định nghĩa dịch vụ và hiển thị các phương thức RPC có sẵn
- Chọn một phương thức, điền vào các trường yêu cầu (Apidog tạo một biểu mẫu dựa trên định nghĩa tin nhắn)
- Gửi yêu cầu và xem phản hồi
Đối với các backend game, điều này có nghĩa là bạn có thể kiểm thử các dịch vụ gRPC nội bộ của mình mà không cần viết một máy khách kiểm thử gRPC bằng Go hoặc C++. Quy trình làm việc giống như kiểm thử REST: điền vào các trường, gửi, kiểm tra phản hồi.
Các RPC truyền phát (Streaming RPCs): gRPC có bốn kiểu giao tiếp – đơn (unary), truyền phát từ máy chủ (server streaming), truyền phát từ máy khách (client streaming) và truyền phát hai chiều (bidirectional streaming). Apidog hỗ trợ đơn và truyền phát từ máy chủ. Đối với truyền phát từ máy khách và truyền phát hai chiều, sự hỗ trợ của công cụ bị hạn chế hơn. Kiểm tra tài liệu Apidog hiện tại để biết trạng thái hỗ trợ truyền phát mới nhất.
TLS: Hầu hết các dịch vụ gRPC sản xuất đều sử dụng TLS. Apidog hỗ trợ gRPC qua TLS với các cài đặt xác minh chứng chỉ có thể cấu hình.
Các cân nhắc khi kiểm thử độ trễ
Các công cụ API tiêu chuẩn không giải quyết trực tiếp các yêu cầu độ trễ dành riêng cho game, và Apidog cũng không ngoại lệ. Nhưng có những cách tiếp cận thực tế.
Đo thời gian phản hồi trong Apidog
Apidog hiển thị thời gian phản hồi cho mỗi yêu cầu. Đối với các điểm cuối REST, điều này cung cấp cho bạn dữ liệu độ trễ của một yêu cầu duy nhất. Bạn có thể chạy cùng một yêu cầu nhiều lần và quan sát sự biến đổi.
Đối với WebSocket, Apidog không tự động đo độ trễ khứ hồi của tin nhắn. Bạn sẽ cần gắn dấu thời gian cho tin nhắn của mình theo cách thủ công và tính toán sự khác biệt từ phản hồi của máy chủ.
Những gì Apidog không thay thế
Để kiểm thử hiệu suất backend game nghiêm túc:
- k6 hoặc Locust để kiểm thử tải các điểm cuối REST dưới áp lực kết nối đồng thời
- WebSocketBenchmark hoặc các công cụ tải WebSocket tùy chỉnh để kiểm thử số lượng kết nối
- Gatling để kiểm thử tải dựa trên kịch bản phức tạp
- Các công cụ tùy chỉnh để đo độ trễ dành riêng cho giao thức (đo thời gian giữa việc xử lý cập nhật vật lý và tất cả máy khách nhận được thông báo)
Apidog là một công cụ phát triển và gỡ lỗi, không phải công cụ kiểm thử tải. Sử dụng nó để xác minh tính đúng đắn trong quá trình phát triển và điều tra hành vi trong quá trình gỡ lỗi. Sử dụng các công cụ kiểm thử tải chuyên dụng để xác thực độ trễ dưới số lượng người chơi thực tế.
Thiết lập kiểm thử thực tế cho backend game
Dưới đây là một thiết lập hoạt động hiệu quả cho hầu hết các đội ngũ backend game:
Cấu trúc không gian làm việc Apidog:
- Một thư mục cho mỗi hệ thống con:
auth,matchmaking,inventory,leaderboards,player-profiles - Một thư mục để kiểm thử WebSocket:
websocket-connections - Một thư mục cho gRPC:
internal-services - Các môi trường cho
local,dev,staging,prod
Các biến môi trường để tập trung hóa:
BASE_URL = http://localhost:3000
WS_URL = ws://localhost:3000/game
GRPC_HOST = localhost:50051
PLAYER_TOKEN = {{generated via pre-request script}}
TEST_PLAYER_ID = player_001
TEST_ROOM_ID = room_test_001
Tự động hóa token xác thực: Viết một script tiền yêu cầu ở cấp độ collection gọi điểm cuối xác thực của bạn và lưu trữ JWT vào một biến môi trường. Tất cả các yêu cầu trong collection sẽ tự động có các token hợp lệ mà không cần làm mới thủ công.
Luồng phiên WebSocket: Tạo một tài liệu kết nối WebSocket cho mỗi luồng chính: join-game-session, matchmaking-flow, reconnection-test. Mỗi tài liệu thiết lập kết nối với các tiêu đề phù hợp và có ghi chú về chuỗi tin nhắn dự kiến.
Kiểm thử dịch vụ gRPC: Nhập trực tiếp các tệp .proto của bạn. Kiểm thử từng phương thức RPC với cả đầu vào trường hợp thành công và trường hợp lỗi. Đặc biệt chú ý đến các trường hợp ID người chơi hoặc token phiên không hợp lệ gây ra các mã lỗi cụ thể – đây là những nguồn gây lỗi phổ biến ở phía máy khách.
Câu hỏi thường gặp
Apidog có hỗ trợ khung nhị phân WebSocket cho các engine game sử dụng giao thức nhị phân tùy chỉnh không? Apidog hỗ trợ thân nhị phân thô trong các tin nhắn WebSocket. Bạn có thể gửi các payload được mã hóa hex hoặc base64. Đối với các giao thức nhị phân tùy chỉnh cao (khung không chuẩn), bạn vẫn có thể cần một công cụ kiểm thử tùy chỉnh.
Apidog có thể kiểm thử gRPC bidirectional streaming không? Hỗ trợ gRPC của Apidog bao gồm unary và server streaming. Hỗ trợ đầy đủ bidirectional streaming thay đổi theo phiên bản. Kiểm tra tài liệu Apidog hiện tại để biết trạng thái mới nhất. Đối với các kiểm thử bidirectional streaming, có thể cần các công cụ như grpcurl hoặc BloomRPC.
Làm thế nào để chúng ta xử lý việc kiểm thử trên các khu vực máy chủ game? Tạo một môi trường Apidog riêng cho mỗi khu vực với các URL cơ sở và địa chỉ máy chủ dành riêng cho khu vực. Chuyển đổi môi trường để chạy cùng một bộ kiểm thử đối với các triển khai theo khu vực khác nhau.
Cách tốt nhất để kiểm thử các luồng hàng chờ tìm trận phụ thuộc vào nhiều máy khách người chơi là gì? Apidog kiểm thử từng máy khách một. Đối với các kịch bản tìm trận nhiều máy khách (hai người chơi tham gia và được tìm trận), bạn cần một kiểm thử tích hợp tùy chỉnh hoặc hai phiên Apidog đồng thời. Để kiểm thử nhiều máy khách tự động, hãy viết các kiểm thử tích hợp sử dụng thư viện HTTP và WebSocket của ngôn ngữ bạn.
Apidog có hỗ trợ các tiêu đề tùy chỉnh cho xác thực WebSocket không? Có. Máy khách WebSocket của Apidog hỗ trợ các tiêu đề kết nối tùy chỉnh. Thêm token xác thực của bạn làm giá trị tiêu đề trước khi thiết lập kết nối.
Có cách nào để tự động phát lại chuỗi tin nhắn WebSocket trong Apidog không? Apidog không hỗ trợ phát lại chuỗi tin nhắn WebSocket tự động. Để kiểm thử WebSocket theo kịch bản, bạn sẽ sử dụng một công cụ tùy chỉnh hoặc một framework như Playwright (có khả năng chặn WebSocket) hoặc viết mã kiểm thử trực tiếp bằng ws (Node.js) hoặc websockets (Python).
Các đội ngũ backend game cần các công cụ phù hợp với thực tế ngăn xếp giao thức của họ – REST, WebSocket và gRPC trong cùng một quy trình làm việc. Apidog tập hợp ba giao thức này trong một giao diện duy nhất, loại bỏ việc chuyển đổi ngữ cảnh liên tục khi quản lý các công cụ riêng biệt cho từng giao thức. Nó sẽ không thay thế bộ công cụ kiểm thử tải của bạn hoặc xử lý việc gỡ lỗi giao thức nhị phân cấp thấp nhất, nhưng đối với việc kiểm thử và gỡ lỗi phát triển hàng ngày, nó bao gồm các lĩnh vực mà các kỹ sư backend game thực sự cần.
