Thật không may, tôi không biết về bất kỳ tài nguyên hoặc sách trực tuyến (tốt) nào về chủ đề này. Và tôi không biết Java. Tuy nhiên, thấy rằng chưa có câu trả lời nào, tôi sẽ chia sẻ một vài lời khuyên từ kinh nghiệm cá nhân.
Trước hết, bạn cần một RPC nhanh và đáng tin cậy , hoặc ít nhất là cơ chế xếp hàng tin nhắn. Đây là những gì sẽ được sử dụng cho cả giao tiếp máy khách-máy chủ và máy chủ-máy chủ. Tôi không biết nếu có bất kỳ giải pháp làm sẵn nào cho Java. Với .NET, chúng tôi luôn tạo ra một tùy chỉnh của riêng mình, vì cơ chế này thực sự quan trọng. Thông thường nhất là một giao thức tin nhắn nhị phân nhẹ qua TCP được sử dụng, nhưng các tùy chọn khác có thể tốt hơn tùy thuộc vào loại trò chơi. Chiến lược theo lượt có thể tốt hơn với XML hoặc SOAP và một game bắn súng có nhịp độ nhanh có thể đảm bảo UDP.
Tối thiểu tuyệt đối cho hệ thống nhắn tin là khả năng gọi các hành động từ xa một cách đáng tin cậy, trong khi vẫn đảm bảo trật tự của chúng . Một bổ sung thực sự hữu ích là hỗ trợ cho mẫu câu trả lời yêu cầu, trong đó một hành động từ xa có thể trả về một số loại kết quả cho người khởi tạo nó. Điều này là không bắt buộc, nhưng có thể làm cho cuộc sống của bạn dễ dàng hơn nhiều.
Khi bạn có tin nhắn của mình, hãy nghĩ về việc phân vùng máy chủ của bạn. Rất có thể, một máy chủ duy nhất sẽ không đủ để lưu trữ trò chơi cho tất cả người chơi. Bạn cần xem xét cẩn thận những nhiệm vụ nào có thể độc lập với nhau và do đó có thể được ủy quyền cho các máy chủ khác nhau. Xác thực và đăng nhập là ứng cử viên rõ ràng nhất cho phân vùng này. Trong số những người khác là tính toán thống kê và xếp hạng, giao tiếp cơ sở dữ liệu (một máy chủ để thực hiện bộ đệm DB chuyên dụng). Vấn đề với các trò chơi MMO, trái ngược với các ứng dụng web, là chúng có xu hướng rất cao, với nhiều dữ liệu cần thiết cho mỗi người chơi. Và hầu hết các hoạt động yêu cầu quyền truy cập vào tất cả hoặc gần như tất cả các dữ liệu này.
Ngay cả khi bạn sử dụng một máy chủ, bạn cũng phải tận dụng nhiều bộ xử lý. Bất kỳ máy chủ MMO nào cũng là một chương trình đồng thời cao (máy chủ hiện tại của chúng tôi có khoảng 30 luồng đồng thời). Để có bất kỳ hy vọng giải quyết vấn đề đồng bộ hóa, bạn phải cách ly các luồng khác nhau. Giống như các máy chủ khác nhau, họ sẽ có dữ liệu của riêng mình và sẽ giao tiếp bằng một số loại giao diện truyền tin nhắn. Thậm chí có thể cùng một RPC mà mạng của bạn sử dụng, nếu nó đủ nhanh.
Sau đó, bạn có cơ sở dữ liệu của bạn. Người chơi MMO thường làm rất nhiều thứ và tạo ra rất nhiều trò chuyện trong thế giới trò chơi, phải được lưu trong cơ sở dữ liệu. Tất cả các máy chủ tôi làm việc cùng không lưu chúng ngay lập tức - thay vào đó, các thay đổi được tích lũy trong bộ nhớ và sau đó được lưu hàng loạt sau mỗi 5 phút hoặc lâu hơn. Điều này cho phép trò chơi tiến triển thuận lợi hơn, với chi phí chậm trễ có thể xảy ra khi viết. Sự chậm trễ này là lý do chính để có một máy riêng để liên lạc cơ sở dữ liệu.
Thông thường các trò chơi MMO sử dụng cơ sở dữ liệu quan hệ làm phụ trợ dữ liệu của họ, nhưng tôi tin rằng cơ sở dữ liệu NoQuery có thể tốt hơn. Thông thường, bạn có một loạt dữ liệu trong DB cho mỗi ký tự, tải tất cả dữ liệu khi ký tự được đăng nhập và rất hiếm khi, nếu có, thực hiện bất kỳ truy vấn phức tạp nào. Chế độ hoạt động này dường như là sở trường của NoQuery. Điều đó nói rằng, tôi chưa sử dụng NoQuery DB với máy chủ MMO thực tế, vì vậy tôi có thể sai ở đây.
Một điều khác liên quan đến cơ sở dữ liệu tôi muốn cảnh báo bạn là điều này. Nhiều nhà phát triển, đặc biệt là sớm trong chu kỳ sản xuất, sẵn sàng lưu trữ dữ liệu "thiết kế trò chơi" trong DB. Tôi đang nói về những thứ như các thông số, khả năng, vật phẩm và các thứ khác như thế. Đừng làm vậy. Những thứ này thực sự là dữ liệu tĩnh không thay đổi trừ khi có bản cập nhật máy chủ; và dữ liệu này luôn luôn cần thiết bởi máy chủ. Thông thường, bạn sẽ không thực hiện bất kỳ truy vấn nào ngoại trừ SELECT * ...
khi máy chủ khởi động. Do đó, bạn không thực sự cần một cơ sở dữ liệu và việc có những thứ này trong DB có rất nhiều nhược điểm. Đối với một, bạn không thể đặt cơ sở dữ liệu dưới sự kiểm soát nguồn.
Đây là ba thành phần chính cho kiến trúc máy chủ MMO: giao tiếp mạng, phân vùng logic và truy cập cơ sở dữ liệu. Tất cả logic sử dụng ba có lẽ là rất phụ thuộc vào trò chơi. Tôi có thể có thêm một số lời khuyên nếu bạn hỏi những câu hỏi cụ thể hơn và cho chúng tôi biết thêm về trò chơi.