Kiến trúc java phía máy chủ MMORPG


8

Tôi hiện đang làm một game MMORPG, dựa trên lượt. Máy khách được cho là chạy trên Android. Bây giờ, bạn tôi đang làm đồ họa, và tôi đã làm các lớp trò chơi (người chơi, vũ khí, v.v.). Bây giờ, nếu cuộc chiến bắt đầu, các lớp có thể bị thao túng bởi các giao diện (thực ra đối với đối tác của tôi, nó giống như làm việc với các giao diện thuần túy, anh ta không cần bất kỳ quyền truy cập nào vào các lớp execaton).

Bây giờ chúng tôi cần giới thiệu một máy chủ trò chơi để cho phép nhiều người chơi. Và một vài câu hỏi rất quan trọng nảy sinh:

1) Tôi có sao chép hoàn toàn mô hình trò chơi vào máy chủ không, không để lại lớp nào trên máy khách hay tốt hơn là có 2 bản sao của mô hình - 1 trên máy chủ và 1 trên thiết bị và hoàn thành đồng bộ hóa định kỳ giữa các lớp đó?

2) Lựa chọn phương thức kết nối nào giữa máy khách và máy chủ (máy khách trong tầm nhìn là điện thoại Android)? Đối với máy chủ - Tôi đang chuyển sang java vì tôi có một số kinh nghiệm với nó. Nhưng bây giờ câu hỏi là - tốt hơn là sử dụng các socket cho tác vụ này hay tôi có thể sử dụng các dịch vụ REST hoặc thậm chí có thể kết nối nó với máy chủ Java EE, điều này tuyệt vời theo quan điểm của tôi vì nó loại bỏ rất nhiều lập trình sự phức tạp? Mặc dù trò chơi là nhiều người chơi, nhưng nó được chơi theo lượt, do đó không cần phải đổi mới thường xuyên.

3) Điều gì về luồng? Mỗi khách hàng nên có chủ đề riêng của mình (trong trường hợp ổ cắm)?

4) Có cuốn sách nào về lập trình trò chơi máy chủ REAL MMORPG không ???

Câu trả lời:


7

Không sao chép toàn bộ mô hình trò chơi vào máy chủ, bạn sẽ không muốn tải tất cả các kết cấu và lưới chi tiết trên máy chủ của mình. Giữ nó đơn giản nhất có thể, xử lý tất cả các quy trình quan trọng như vị trí, sức khỏe, mọi chuyển động nhưng không tải mọi thứ. - KHÔNG BAO GIỜ ĐƯỢC TIN TƯỞNG.

Có rất nhiều sách, cùng với nhiều wiki. Mỗi nhà cung cấp động cơ như IdeaFrabrik, Epic Games, Exitgames, Unity (cũng hỗ trợ mmo) đều có tài liệu rất tốt cho các sản phẩm của họ. Hầu hết các công cụ đó là công khai để bạn có quyền truy cập vào các giải pháp hoàn chỉnh và bạn thực sự có thể tìm hiểu cách thức hoạt động của công cụ.

Cách dễ nhất để tìm một cuốn sách bạn cần là tìm kiếm Amazon cho MMORPG, sau đó vào danh mục sách và chọn danh mục phụ "lập trình". Nếu bạn google nó, bạn sẽ nhận được kết quả không mong muốn ...

Dưới đây là danh sách những cuốn sách tôi tìm thấy

Tôi chưa đi sâu vào lập trình máy chủ, nhưng thực tế, tôi đã gần như chọn giải pháp công cụ Unity + Photon Cloud cho dự án MMORPG của mình. (HeroEngine giành chiến thắng) Phía máy chủ được thực hiện trong phần này bằng C # và một điều tôi nhớ rất rõ là cách mọi thứ được giải thích trong hướng dẫn.


Chúng tôi không sử dụng bất kỳ công cụ nào vì trò chơi không yêu cầu. Nó thiếu đồ họa mát mẻ. Vì vậy, chúng tôi không cần Unity với các tính năng tối cao cho 3D. Những cuốn sách bạn cung cấp dường như quá rộng - vẫn không có tài liệu tham khảo về cuốn sách giải thích cách viết một máy chủ tải nhiều người chơi. Nhưng cảm ơn vì lời khuyên.
Artem Moskalev

Bạn phải tìm hiểu về lập trình máy chủ-máy khách TCP. "Nói theo cách tàn bạo, lập trình máy chủ cũng được sử dụng trong các trò chơi". Bạn phải học cơ sở của nó. Điều này có thể giúp bạn bắt đầu với nó trong Java. edn.embarcadero.com/article/31995
Mikolaj Marcisz

Vâng, tôi biết rằng đã =) Tôi đã lập trình đủ các kết hợp với JMS và các máy chủ thông báo chuỗi đơn giản =) Đó là lý do tại sao tôi hỏi cái nào tốt hơn + ổ cắm ở mức khá thấp so với Java EE mà tôi đã làm việc trước đây) Tôi chỉ không biết nó được thực hiện như thế nào với các trò chơi nhiều người chơi vì cho đến nay có vẻ như máy chủ trò chơi lập trình hoàn toàn khác với các trang web lập trình hoặc các chương trình trao đổi tin nhắn đơn giản)
Artem Moskalev

4

1) Tôi có sao chép hoàn toàn mô hình trò chơi vào máy chủ không, không để lại lớp nào trên máy khách hay tốt hơn là có 2 bản sao của mô hình - 1 trên máy chủ và 1 trên thiết bị và hoàn thành đồng bộ hóa định kỳ giữa các lớp đó?

Đồng ý với Mikolaj không sao chép mọi thứ. Gửi càng ít dữ liệu càng tốt. Bạn có thể có cùng các lớp (chỉ đại diện cho mô hình dữ liệu, không phải các tài sản khác) trong máy khách và máy chủ, nhưng không gửi chúng qua mạng. Bạn muốn tuần tự hóa chúng trên máy chủ và giải tuần tự hóa trên máy khách. Khách hàng chỉ nên gửi lệnh đến máy chủ.

2) Lựa chọn phương thức kết nối nào giữa máy khách và máy chủ (máy khách trong tầm nhìn là điện thoại Android)? Đối với máy chủ - Tôi đang chuyển sang java vì tôi có một số kinh nghiệm với nó. Nhưng bây giờ câu hỏi là - tốt hơn là sử dụng các socket cho tác vụ này hay tôi có thể sử dụng các dịch vụ REST hoặc thậm chí có thể kết nối nó với máy chủ Java EE, điều này tuyệt vời theo quan điểm của tôi vì nó loại bỏ rất nhiều lập trình sự phức tạp? Mặc dù trò chơi là nhiều người chơi, nhưng nó được chơi theo lượt, do đó không cần phải đổi mới thường xuyên.

Bạn đang lên kế hoạch cho một MMORPG theo lượt (mặc dù không biết nó sẽ hoạt động như thế nào). Vì vậy, tốc độ không phải là vấn đề lớn. Bạn có thể sử dụng bất kỳ loại dịch vụ nào, REST có thể tốt, đơn giản. Thông thường các MMORPG sử dụng UDP (không an toàn, nhỏ hơn, nhanh hơn) cho những thứ như cập nhật chuyển động trong đó một gói bị mất hoặc hai không quan trọng và TCP (bảo mật, trên cao) để liên lạc an toàn. Hầu hết các trò chơi có thể sử dụng một số loại giao thức tùy chỉnh được mã hóa, nén qua UDP và TCP để làm cho nó nhanh và khó bị bẻ khóa.

3) Điều gì về luồng? Mỗi khách hàng nên có chủ đề riêng của mình (trong trường hợp ổ cắm)?

Thông thường bạn muốn có một nhóm chủ đề. Mỗi luồng từ hồ bơi dịch vụ một yêu cầu, sau đó được tái chế. Khi bạn không có đủ chủ đề, bạn có thể xem xét việc chặn hoặc phân bổ nhiều chủ đề hơn.

4) Có cuốn sách nào về lập trình trò chơi máy chủ REAL MMORPG không ???

Mikolaj đã googled điều đó cho bạn ...


Bạn có thể giải thích nhiều hơn về nhóm chủ đề? Nếu có ổ cắm, thì máy chủ đang lắng nghe yêu cầu và phân bổ một ổ cắm mới cho mỗi ổ cắm. Những ổ cắm với tất cả thông tin đến có thể được gói gọn như một công việc cho luồng. Nhưng làm thế nào các chủ đề được lấy từ nhóm chủ đề nếu mỗi lần các chủ đề đó có công việc khác nhau? + có bao nhiêu ổ cắm mở có thể chứa một máy chủ trung bình? Nó sẽ tốn nhiều tài nguyên hơn REST hay không? + trong REST không có trạng thái phiên nên khó duy trì thông tin người chơi. Nhưng phần còn lại trong java có một sự tích hợp hoàn hảo vào máy chủ doanh nghiệp là tốt
Artem Moskalev

Những cuốn sách được giới thiệu là tất cả về thiết kế OOP của MMORPG dường như từ các bình luận. Đối với Id đó thay vì dính vào GoF. Một lần nữa, có vẻ như lập trình trò chơi trực tuyến nhiều người chơi ở phía máy chủ là một loại kiến ​​thức thiêng liêng được truyền qua thế hệ =) Tất cả các diễn đàn / bài đăng / sách đến với những ý tưởng đó: "đừng thử lập trình MMO / Lập trình MMO thực sự khó / MMO không dành cho một người mới "... và KHÔNG CÓ LỜI KHUYÊN
NÀO


Những cuốn sách được giới thiệu là tất cả về thiết kế OOP của MMORPG dường như từ các bình luận. Đối với Id đó thay vì dính vào GoF. Câu này không có ý nghĩa. Ngoài ra việc xây dựng một MMORPG tương đương với việc chế tạo một chiếc máy bay phản lực. Tôi muốn nói kiếm đôi cánh của bạn bằng máy bay giấy.
MartinTeeVarga

Bạn đúng 100% về máy bay giấy =) Nhưng những cuốn sách đó thậm chí không phải là về máy bay giấy (bởi máy bay giấy tôi có nghĩa là lập trình phía máy chủ mmo) - Tôi đã học được điều đó từ các nhận xét trên amazon =) Một số trong những cuốn sách đó xử lý thiết kế các mẫu cho các trò chơi MMORPG, có thể học hỏi từ các cuốn sách khác hay hơn, trong cùng bối cảnh tạo ra các trò chơi. + Tôi đã xây dựng B-2, vì vậy tôi đánh giá cao bất kỳ lời khuyên nào tôi có thể nhận được. Cảm ơn =)
Artem Moskalev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.