Nơi để bắt đầu mã hóa bảng xếp hạng trực tuyến?


7

TÔI KHÔNG BAO GIỜ, EVER đã làm BẤT K sort loại mã mạng nào trong C ++, tôi thậm chí không biết các thư viện tồn tại, nhưng một nhu cầu phổ biến cho trò chơi của tôi là bảng xếp hạng trực tuyến ...

Vì vậy, những loại thư viện tôi nên nghiên cứu vào?

Trò chơi của tôi là đa nền tảng (win, gnu, mac), sử dụng C ++, ClanLib 1.0 và Lua. Ngoài ra, công cụ này là zlib (công cụ độc quyền mà tôi không thể giải phóng nguồn không hoạt động)


3
Đề xuất đầu tiên của tôi sẽ là "không sử dụng C ++ cho máy chủ bảng xếp hạng". Thực hiện nó trong một ngôn ngữ cấp cao hơn, thường sẽ cung cấp chức năng để chăm sóc bắt tay, phiên và như vậy. Hầu hết trong số họ cho phép giao tiếp qua SOAP, được hỗ trợ dễ dàng trong C ++, vì vậy khách hàng của bạn có thể sử dụng nó để liên lạc với máy chủ. Cá nhân, tôi đang tạo hệ thống bảng xếp hạng chung của mình trong .NET WCF (C #).
Elideb

Câu trả lời:


6

Câu hỏi đầu tiên, bạn quan tâm đến gian lận bao nhiêu? Tạo một ứng dụng web đơn giản cho bảng xếp hạng có thể khá dễ dàng, nhưng nó sẽ ngay lập tức bị spam khỏi sự tồn tại. Tôi sẽ xem curl như một thư viện HTTP async phong nha mà bạn sẽ có thể tích hợp vào bất kỳ mã khách hàng nào. Về phía máy chủ, tôi giả sử bạn không có ngân sách cho các máy chủ chuyên dụng, vì vậy Google App Engine có thể phù hợp nếu bạn biết Python hoặc Java.


Tôi thứ hai sử dụng Google App Engine. Ngay cả khi trò chơi của bạn trở nên phổ biến rộng rãi, bạn vẫn có thể dễ dàng có thể phù hợp với nó trong tầng miễn phí. Ngoài ra, không bao giờ phải lo lắng về nền tảng máy chủ là một điểm cộng lớn.
drxzcl

Vấn đề là bản thân trò chơi tôi không biết làm thế nào để ngăn chặn gian lận ... Ý tôi là, có thể dễ dàng chạy Cheat Omatic (tìm kiếm phần mềm này, nó khá tuyệt), và chỉnh sửa điểm số, hoặc bất kỳ số khác trong bộ nhớ (thực sự sử dụng nó, tôi thậm chí có thể tạo ra nhiều đơn vị hơn mức bình thường được phép trong Age of Empires chẳng hạn).
tốc

Có một cái gì đó giống như công cụ ứng dụng google không sử dụng python hoặc java? Tôi biết các ngôn ngữ, nhưng không phải hai ngôn ngữ đó: /
speeder

Không phải là miễn phí. Có Heroku nếu bạn biết Ruby / Rails, và tôi nghe nói nó không quá đắt. Đối với việc ngăn chặn gian lận, tôi sẽ cần biết nhiều hơn về trò chơi. Anticheat của PunkBuster và Valve có thể là các tùy chọn để làm cứng máy khách, nhưng bạn sẽ cần một số giải pháp dựa trên máy chủ nếu bạn muốn thực sự chắc chắn. Ngoài ra, chỉ cần có các mục trên bảng xếp hạng tuổi sau một tuần hoặc lâu hơn, hầu hết những người gửi thư rác sẽ mất hứng thú.
coderanger

3

Tất cả bắt đầu với thiết kế giao thức. Bạn cần gì để truyền qua dây? Những kiểu bắt tay và cơ chế xác minh là cần thiết? Nó có thể đơn giản như một gói mạng được gửi mỗi khi trò chơi kết thúc. Nó chỉ đơn giản là chứa tên người dùng với điểm số, ví dụ{ "Joel", "33" }

Vấn đề là làm thế nào để bạn xác nhận điểm số đã đạt được một cách hợp pháp? Có lẽ ai đó chỉ đơn giản phân tích các gói giao thức của bạn với một bộ phân tích mạng và kết luận rằng chỉ có một tên người dùng với điểm số được gửi. Sau đó, anh ta tự tạo gói này và gửi nó. Đây là những gì coderanger có nghĩa là "bị spam ra khỏi sự tồn tại".

Đối với việc lưu trữ bảng xếp hạng, tôi khuyên bạn nên sử dụng cơ sở dữ liệu, như SQLite. Điều này cung cấp cho bạn cơ chế lưu / truy cập an toàn và đồng thời vào bảng thành tích. Cơ sở dữ liệu cơ bản đảm nhận việc đồng bộ hóa.

Đối với mã mạng, bạn cần hai phần. Một cái gì đó để gửi dữ liệu đến máy chủ và một cái gì đó tiêu thụ và xử lý nó ở phía máy chủ. Như coderange đã đề cập, nó có thể đơn giản như HTTP / XML / JSON HTTP GET / POST và sau đó một máy chủ web chạy ở phía máy chủ sẽ tiêu thụ điều đó trong một dịch vụ web. Phần tốt là bạn không phải đối phó với bất kỳ mã mạng nào cho phía máy chủ do máy chủ web chăm sóc.


MySql sẽ hoạt động? Quốc gia nơi tôi sống lưu trữ MySql khá phổ biến và rẻ (tốt, giá rẻ).
tốc

Chắc chắn rồi. Hầu như bất kỳ cơ sở dữ liệu sẽ phù hợp với kịch bản này.
Randomguy

1

Từ kinh nghiệm của tôi, có nhiều bước bạn sẽ phải trải qua. Chọn lib C ++ không phải là điều cấp bách nhất trong số đó. Có nhiều điều quan trọng hơn bạn sẽ phải xem xét.

Lưu trữ

Liên quan đến việc lưu trữ bảng xếp hạng của bạn, bạn sẽ phải đưa ra lựa chọn. Hoặc bạn thuê máy chủ và bạn có thể chọn các công nghệ bạn muốn và làm những gì bạn muốn. Hoặc bạn thuê không gian lưu trữ và bạn sẽ phải làm việc với các kỹ thuật viên theo ý của bạn. Hoặc bạn sẽ sử dụng một trong những giải pháp đám mây và phải làm việc với những hạn chế và lợi thế của những giải pháp đó.

Đó là tất cả một câu hỏi về đầu tư thời gian chi phí và tái sử dụng. Nếu bạn đã có máy chủ, bạn có thể thử lưu trữ bảng thành tích của mình ở đó, nếu bạn đã sử dụng một trang web được lưu trữ, bạn có thể bắt đầu tạo mẫu với điều đó.

Cá nhân tôi lúc đầu khuyên bạn nên thuê một máy chủ hoặc một máy chủ ảo.

Câu hỏi này xứng đáng là một chủ đề của riêng nó và nên được trả lời độc lập nếu bạn gặp khó khăn trong việc xử lý nó.

Dịch vụ

Những công nghệ máy chủ nào bạn sẽ sử dụng tùy thuộc vào bạn và phụ thuộc rất nhiều vào các giải pháp lưu trữ bạn sẽ chọn.

DB

Tất nhiên bạn có thể bắt đầu với một bộ lưu trữ SQL, MySQL khá rẻ và hiệu quả để sử dụng, được hầu hết các nhà cung cấp dịch vụ lưu trữ hỗ trợ. Đây là giải pháp tôi đã và đang sử dụng. Nhưng hãy cẩn thận khi nói đến khả năng mở rộng, bạn có thể hối tiếc khi sử dụng nó sau này.

Có những giải pháp khác tốt hơn. Các máy chủ DB dựa trên ERLANG như CouchDB khá phổ biến. Một trong số đó, RIAK rất đơn giản để phân phối trên nhiều máy chủ, hiệu quả, sử dụng JSON và được sử dụng bởi các tên tuổi lớn như Mozilla và GitHub.

Back-end

Bạn sẽ không cấp quyền truy cập vào bộ lưu trữ dữ liệu của mình trực tiếp từ ứng dụng khách. Bạn sẽ cần phải viết một ứng dụng để quản lý xác thực, ủy quyền, một số logic và truy cập DB.

Java, PHPperl thường được sử dụng để viết các dịch vụ web cung cấp các chức năng này, được hỗ trợ tốt bởi các nhà cung cấp dịch vụ lưu trữ và có cộng đồng phát triển mạnh.

Nhưng nếu bạn muốn tránh chi phí hoạt động của một máy chủ HTTP chính thức như Apache, bạn nên sử dụng nodeJS . Đó là một giải pháp nhanh chân rất hiệu quả và nhanh chóng. Được sử dụng bởi e-bay, Microsoft và Linked-In. Nó tích hợp rất độc đáo trong các thiết lập sử dụng JSON để trao đổi dữ liệu.

Thiết kế

Thiết kế bảng xếp hạng của bạn sẽ bắt đầu với việc lưu trữ dữ liệu. Bạn muốn lưu trữ những gì. Làm thế nào để bạn muốn lưu trữ nó và trong bao lâu?

Bạn muốn lưu trữ điểm số của khóa học (thời gian, khoảng cách, điểm ...), nhưng với điều đó bạn có nhiều cấp độ không? sau đó bạn sẽ cần lưu trữ ID cấp độ, bạn có hỗ trợ nhiều nền tảng không? Nếu vậy, độ khó của trò chơi có thể khác nhau trên các nền tảng khác nhau vì lý do kỹ thuật hoặc nhân khẩu học, bạn cũng sẽ lưu trữ điều đó ...

Làm thế nào để bạn muốn đau nó? Bạn có muốn chỉ giữ điểm số tốt nhất, thay thế tất cả những điểm trước đó được thực hiện bởi người chơi trên cùng một nền tảng / cấp độ / bối cảnh không? Hoặc bạn sẽ lưu trữ mọi thứ để theo dõi tất cả các điểm có thể? Bạn sẽ giữ để loại bỏ điểm số trước đây để khai thác dữ liệu?

Một khi bạn trả lời những câu hỏi này, bạn có thể bắt đầu suy nghĩ về việc thực hiện.

Giao thức

Bạn sẽ muốn chuyển dữ liệu từ và đến khách hàng. Đối với điều này, bạn sẽ phải tạo ra một giao thức truyền thông tốt.

Sự lựa chọn của các giao thức cơ bản là thứ yếu trong bước này (HTTP, TCP, UDP). Dù lựa chọn của bạn là gì, bạn sẽ phải tạo ra giao thức của riêng mình một cách cẩn thận để bạn có thể xử lý các lỗi, thay đổi trong giao thức, cập nhật ứng dụng, v.v ...

Vì vậy, hãy đảm bảo ứng dụng máy chủ của bạn có thể xử lý việc cung cấp dữ liệu cho các ứng dụng được cập nhật và các ứng dụng chạy các phiên bản cũ hơn.

Đảm bảo bảo vệ dữ liệu được truyền đến và từ máy chủ. Hãy cẩn thận về việc bảo vệ tải lên điểm số, bạn có thể sử dụng khóa băm, mã hóa và các cơ chế khác để bảo vệ máy chủ của bạn khỏi những kẻ gian lận.

Bất cứ nơi nào bạn chọn gửi dữ liệu nhị phân hoặc văn bản (JSON, XML) là tùy thuộc vào bạn. Nhưng để linh hoạt và tương thích, tôi muốn giới thiệu JSON. Tránh XML. Sử dụng nhị phân nếu bạn thực sự cần / muốn nó.

Chủ đề này đáng được chú ý hơn và bạn có thể có nhiều câu hỏi hơn ...

Khách hàng

Khách hàng sẽ phải tích hợp với giải pháp của bạn. Bạn không nên chọn các lớp giao thức và công nghệ máy chủ của mình dựa trên ngôn ngữ của máy khách. Bạn nên tích hợp giải pháp máy chủ của bạn vào trò chơi của bạn.

Nếu bạn chọn JSON trên HTTP, sẽ có libs cho điều đó.

Có các lib C / C ++ cho JSON, tôi khuyên bạn nên sử dụng chúng. Bạn có thể viết của riêng bạn nếu bạn muốn. Tôi đã viết một lib lib nhỏ trong vài giờ. Hiện tại nó được sử dụng trong các trò chơi trên hàng chục nền tảng.

Liên quan đến HTTP trong C ++ sử dụng một cái gì đó hiện đại hơn CURL. cpp-netlib nên làm.

Cảnh giác với các mã hóa ký tự, vv khi gửi dữ liệu mặc dù.

Xác thực

Để có thể lưu trữ và hiển thị điểm số tốt nhất cho người dùng của bạn, họ sẽ phải được xác định bằng cách nào đó. Có nhiều cách.

Đơn giản nhất là không có. Sử dụng trường Enter Name Here để hiển thị tên trên bảng thành tích.

Bạn cũng có thể yêu cầu người chơi đăng ký ... đây thường là một quá trình khiến người chơi nản lòng.

Một cách tôi đã sử dụng rất nhiều là xác thực Facebook. Bằng cách này, bạn có thể truyền dữ liệu xác thực đến hoặc thông qua máy chủ của mình và nhận dữ liệu về bạn bè và phục vụ bảng xếp hạng được cá nhân hóa, ví dụ như bảng xếp hạng Toàn cầu, bảng xếp hạng bạn bè ...


0

Phía khách hàng: Ứng dụng hoặc trò chơi sử dụng http lib như libcurl hoặc gói mạng sfml. Phía máy chủ: Một giải pháp đơn giản với php và mysql, postgresql hoặc sqlite3. Các tập tin php bị ẩn hoặc không thể truy cập được đối với người dùng.


Câu trả lời này có thể được cải thiện bằng cách viết về cách sử dụng các công nghệ đó, thay vì chỉ liệt kê chúng.
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.