Máy chủ trò chơi dành cho trò chơi theo lượt trên Android / iOS


9

Tôi hiện đang lập trình một trò chơi trên iPhone và tôi muốn tạo chế độ nhiều người chơi trực tuyến. Trong tương lai, ứng dụng này sẽ được chuyển sang các thiết bị Android, vì vậy tôi đã tự hỏi làm thế nào để tạo máy chủ trò chơi?

Đầu tiên, tôi nên chọn ngôn ngữ nào? Làm thế nào để làm cho một máy chủ có thể giao tiếp cả với các chương trình được viết bằng object-c và Java?

Sau đó, làm thế nào để làm điều đó một cách hiệu quả? Có tốt không nếu tôi mở một ổ cắm theo máy khách (sẽ có 2)? Tôi nên gửi loại thông tin nào đến máy chủ? cho khách hàng?

Câu trả lời:


7

Tôi không có ý định bắt đầu một cuộc chiến thần thánh ở đây, nhưng hầu hết các dịch vụ internet (flickr, twitter, facebook và v.v.) đã bỏ SOAP để ủng hộ các dịch vụ web RESTful và JSON là định dạng nối tiếp. Mặc dù về cơ bản là giống nhau, các dịch vụ REST dựa vào phương thức url và http để xác định những gì nên làm, ví dụ:

GET /articles - list all articles
POST /articles - add a new article
PUT /articles/123 - update article 123 with new data

JSON - được mô tả trong json.org - cũng đơn giản hơn XML và có thể không liên quan, sẽ giúp bạn tiết kiệm một vài byte cho mỗi yêu cầu. Theo ví dụ trước, đây là cách một bài viết sẽ được mô tả trong ký hiệu JSON:

{ 
 "id": 123,
 "author": "Cyril",
 "content": "Hello, this is an article",
 "tags": [ "gamedev", "webservices", "multiplayer" ] 
}

Đối với iOS có bài viết hay này http://petermcintyre.wordpress.com/2010/11/04/consume-json-rest-in-ios/ trong đó đề cập đến http://code.google.com.vn/p/json-framework / để phân tích cú pháp và tạo dữ liệu.

Là theo lượt, bạn có thể dựa vào các phiên http trên máy chủ để duy trì trạng thái, do đó không cần phải giữ kết nối ổ cắm liên tục đến máy chủ. Bất kỳ ngôn ngữ phía máy chủ nào cũng hỗ trợ điều này (php, python, java, v.v.).

Kiến trúc này cho phép bạn mở rộng quy mô theo chiều ngang (thêm nhiều máy chủ) một cách minh bạch.


4

Vì trò chơi của bạn sẽ được phát hành theo lượt, cập nhật theo thời gian thực không phải là điều cực kỳ quan trọng. Cách dễ nhất để làm điều này là sử dụng một máy chủ đã được xây dựng, tôi sẽ đi với một máy chủ web. Bất kỳ nền tảng nào có giá trị chuyển trò chơi của bạn để tạo điều kiện truy cập các dịch vụ web nằm trên máy chủ web.

Để cung cấp thông tin cập nhật gần thời gian thực, tôi khuyên bạn nên xem xét việc bỏ phiếu dài. Mã tại liên kết đó, cung cấp việc triển khai cơ bản nhất về bỏ phiếu dài từ phía máy chủ. Nhưng điểm mấu chốt là một khi yêu cầu được thực hiện đối với tài nguyên, máy chủ sẽ thực hiện cuộc gọi chặn cho đến khi dữ liệu được yêu cầu khả dụng. Sau đó, bạn lặp lại quá trình một lần nữa, và một lần nữa.

Về mặt dữ liệu nào bạn nên gửi lại, luôn coi khách hàng là kẻ thù. Máy khách nên gửi "trạng thái bật" của nó là gì, máy chủ xác nhận nó, và sau đó nếu mọi thứ kiểm tra, nó sẽ gửi lại "trạng thái trò chơi" mới cho tất cả các máy khách được kết nối.

-

Các dịch vụ web SOAP có lẽ là nơi tốt nhất để bắt đầu ( liên kết ), chúng dễ dàng bắt đầu và hầu hết các khung web cung cấp một phương pháp để hiển thị chúng. Bạn cũng có thể muốn xem xét các dịch vụ RESTful, nhưng chúng thường để lại một chút quá trình tuần tự hóa cho người tiêu dùng.

Để sử dụng dịch vụ web SOAP trên Android, tôi sẽ xem tại đây .


Xin chào và cảm ơn phản hồi của bạn. Nhưng tôi chưa hiểu cách gửi dữ liệu đến dịch vụ web của mình? làm cách nào để tuần tự hóa đầu vào của người dùng (ở đây di chuyển trong bảng 8 * 8 của tôi, ví dụ: người chơi 1 từ [0,0] đến [1,1]) và sau đó làm thế nào để tuần tự hóa trạng thái trò chơi?
Cyril

Kiểm tra hai liên kết tôi đã thêm. Họ sẽ giúp bạn bắt đầu với các dịch vụ web SOAP, đây có lẽ là cách đơn giản nhất để bắt đầu.
Nate

Đối với Android và iOS, bạn không cần sử dụng bỏ phiếu dài. Thông báo đẩy của Apple hoặc Google Cloud Messaging sẽ cho phép bạn đẩy dữ liệu từ máy chủ đến thiết bị của mình.
Matt

2

Tôi nghĩ rằng sử dụng SOAP hoặc thậm chí HTTP là quá mức cần thiết. Chỉ cần xác định giao thức của riêng bạn qua các kết nối TCP vanilla. Ví dụ, giải thích từng dòng văn bản được gửi dưới dạng một lệnh. Xác định những lệnh / phản hồi nào của máy khách và máy chủ được phép gửi.

FICS hoạt động theo cách đó và nó đã phục vụ hàng ngàn người chơi cờ trong nhiều năm. IRC cũng hoạt động theo cách đó (xem RFC 1459).


Mặc dù vậy, HTTP cung cấp một số lợi thế: nó có thể sử dụng proxy, nó hầu như không bao giờ được tường lửa, nó cung cấp mã hóa gần như sử dụng HTTPS, có một số phương thức xác thực ...
sam hocevar
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.