2009-03-11 37 views
15

Tôi đang lên kế hoạch xây dựng một trò chơi nhiều người chơi nhỏ có thể chạy dưới dạng applet java hoặc tệp flash trong trình duyệt web. Tôi đã không thực hiện bất kỳ lập trình máy chủ trước, vì vậy tôi tự hỏi những gì sắp xếp của kiến ​​trúc máy chủ tôi cần phải có. Nó sẽ dễ dàng cho tôi để tạo tập tin perl/php trên máy chủ, mà các liên hệ mã java/flash để cập nhật vị trí/hành động của người chơi, v.v. Nhưng tôi đang xem xét liệu tôi có nên có một trang web chuyên dụng hay không máy chủ, mà hệ điều hành để sử dụng, cơ sở dữ liệu, vv Ngoài ra, số lượng băng thông được sử dụng và khả năng mở rộng là một xem xét.Kiến trúc máy chủ cho trò chơi nhiều người chơi?

Một tùy chọn khác có thể sử dụng hệ thống lưu trữ đám mây (trái ngược với máy chủ chuyên dụng), vì vậy họ sẽ quan tâm đến việc bổ sung thêm máy khi trò chơi phát triển. Miễn là mỗi máy chủ chạy các tập tin perl/php lõi để cập nhật cơ sở dữ liệu, nó sẽ hoạt động tốt.

Một tùy chọn khác có thể là sử dụng công cụ ứng dụng của Google.

Bất kỳ suy nghĩ nào về kiến ​​trúc máy chủ, lựa chọn hệ điều hành/cơ sở dữ liệu và liệu phương pháp sử dụng script perl/php/python của tôi cho lập trình phía máy chủ có tốt hay không!

+0

Bạn có thể giải thích loại trò chơi này là gì không? Điều này sẽ giúp chúng tôi giúp bạn :) – Uri

+0

Nó sẽ là một trò chơi RPG nhiều người chơi, vì vậy thời gian thực như trái ngược với lượt dựa :) –

+0

Tôi nghĩ bạn nên quản lý tất cả trạng thái trong bộ nhớ của một máy đơn và thường xuyên sao lưu nó lên đến một cơ sở dữ liệu (giao dịch?). Dễ dàng hơn để đồng bộ hóa tất cả các khách hàng theo cách đó. – Uri

Trả lời

8

Bạn cần làm rõ thêm về trò chơi và suy nghĩ thêm về kiến ​​trúc hơn là chi tiết triển khai cụ thể.

Câu hỏi chính là liệu trò chơi của bạn có theo thời gian thực, dựa trên cơ sở hoặc trì hoãn lâu dài (ví dụ: cờ điện tử). Một câu hỏi khác là liệu bạn có đang đóng băng trạng thái cho các lần tải lại tiếp theo hay không.

Tôi đặc biệt khuyên bạn nên tìm hiểu xem liệu tất cả người chơi trong cùng một trò chơi có được lưu trữ trên cùng một máy chủ hay không (ví dụ: 1000 trong số 4 người chơi so với 4 trận đấu của 1000 người chơi). Nếu có thể, đi với người đầu tiên và gắn bó tất cả mọi người trong cùng một trò chơi dưới cùng một máy chủ. Bạn sẽ có đủ thời gian đồng bộ hóa nhiều máy khách với một máy chủ, thay vì có nhiều máy chủ để người chơi được đồng bộ hóa. Nếu không, định nghĩa về tính nhất quán là vấn đề.

Nếu có thể, yêu cầu mỗi khách hàng liên lạc với máy chủ và sau đó máy chủ phân phối các bản cập nhật cho khách hàng. Bằng cách này, bạn có một "trạng thái chính thức" và có thể thực hiện nhiều giải pháp xung đột, ngữ nghĩa khác nhau, ... Đồng đẳng để mang lại hiệu suất tốt hơn trong các trò chơi nhanh hơn (ví dụ: FPS) nhưng giới thiệu rất nhiều vấn đề.

Tôi không thể cho cuộc sống của tôi thấy bất kỳ lý do thuyết phục nào để làm điều này và perl hoặc PHP. Trò chơi của bạn không dựa trên web, tại sao bạn nên viết nó bằng ngôn ngữ theo định hướng web? Sử dụng J2EE cũ tốt cho máy chủ và trao đổi dữ liệu với khách hàng của bạn thông qua XML và AJAX. Nếu có thể, hãy chạy một ứng dụng Java thực trên các máy khách thay vì các servlet. Sau đó, bạn có thể hưởng lợi từ việc sử dụng JMS sẽ giảm tải rất nhiều cho bạn bằng cách tóm tắt rất nhiều chi tiết liên lạc cho bạn.

+0

Khách hàng sẽ chạy nó như một applet java. Bạn có nghĩa là máy chủ nên chạy java servlets hoặc máy chủ nên chạy một ứng dụng toàn diện? nó chỉ là perl/php có xu hướng phổ biến hơn và được hỗ trợ trên các máy chủ, vì vậy tôi nghĩ việc tạo mã máy chủ trong chúng có thể là một ý tưởng tốt hơn –

+0

Máy chủ phải là một ứng dụng đầy đủ. Bạn có thể muốn quản lý trạng thái hệ thống và đồng bộ hóa giữa các máy khách trong bộ nhớ. – Uri

+0

Nếu bạn chạy perl/php trên một máy chủ web thông thường, bạn sẽ có một quy trình riêng cho mỗi khách hàng. Nếu bạn chạy một máy chủ đa luồng có thể phục vụ nhiều yêu cầu trong một ngôn ngữ cấp cao, mọi thứ có thể đơn giản hơn. – Uri

6

Đối với kiến ​​trúc máy chủ của bạn, bạn có thể xem Three Rings' code. Họ đã viết một số trò chơi rất khả năng mở rộng trong Java (cả phía máy khách và phía máy chủ).

+2

+1 cho ba chiếc nhẫn - cũng xem www.gamegardens.com - nó cung cấp một điểm vào dễ dàng và tốt cho những người muốn tạo trò chơi nhiều người chơi của riêng mình bằng cách cung cấp cho bạn một khuôn khổ để tạo trò chơi và cho phép bạn sử dụng máy chủ trò chơi của họ – ninesided

0

Tôi cũng sẽ không khuyến khích sử dụng PHP, HTTP cũng không phải là ý tưởng tốt nhất vì nó là không trạng thái và nói nhiều. Tôi đã làm việc một thời gian trong công ty hiện đang phát triển trò chơi nhiều người chơi thực sự lớn. Back-end là đồng bằng JVM (được kết nối qua tomcat bởi nhiều khách hàng và từ điện thoại di động một cho mỗi khách hàng). Vì vậy, tôi biết ít dữ liệu bạn chuyển các bộ đệm nhỏ hơn bạn cần trên máy chủ -> nhiều khách hàng hơn trên một máy và cũng có một phản ứng nhanh hơn một chút. Cũng xem xét bảo mật, https là khá tốn kém, đặc biệt là nếu bạn cần phải chuyển đồ họa và âm thanh.Giao thức Binnary của riêng bạn với thùng chứa khách không phải trình duyệt sẽ làm tốt nhất (lựa chọn tốt là giao thức có thể chuyển đổi cho thời gian phát triển-gỡ lỗi). Có lẽ âm thanh phức tạp nhưng không phải vậy. @ Sarah gợi ý tốt đẹp, cảm ơn quá;)

+0

btw ba vòng và liên kết gamegardens đang bị chặn bởi những người bảo vệ AntiP2P, bất cứ ai cũng biết tại sao lại như vậy? – tomasb

Các vấn đề liên quan