Tôi đang làm việc trên một máy chủ trò chơi chung quản lý các trò chơi cho một số lượng khách hàng nối mạng TCP tùy ý chơi trò chơi. Tôi có một 'thiết kế' được hack cùng với băng keo đang hoạt động, nhưng dường như vừa mỏng manh vừa không linh hoạt. Có một mô hình được thiết lập tốt cho cách viết giao tiếp máy khách / máy chủ mạnh mẽ và linh hoạt không? (Nếu không, bạn sẽ cải thiện những gì tôi có dưới đây như thế nào?)
Tôi thực sự có điều này:
- Trong khi thiết lập trò chơi, máy chủ có một luồng cho mỗi ổ cắm người chơi xử lý các yêu cầu đồng bộ từ máy khách và phản hồi từ máy chủ.
- Tuy nhiên, khi trò chơi đang diễn ra, tất cả các luồng ngoại trừ một lần ngủ và luồng đó sẽ quay vòng qua tất cả người chơi cùng một lúc để thông báo về di chuyển của họ (trong phản hồi yêu cầu đảo ngược).
Đây là sơ đồ về những gì tôi có hiện tại; nhấp để xem phiên bản lớn hơn / dễ đọc hơn hoặc PDF 66kB .
Các vấn đề:
- Nó yêu cầu người chơi trả lời chính xác lần lượt với thông điệp chính xác. (Tôi cho rằng tôi có thể cho phép mỗi người chơi trả lời bằng những câu chuyện tào lao ngẫu nhiên và chỉ tiếp tục một khi họ cho tôi một nước đi hợp lệ.)
- Nó không cho phép người chơi nói chuyện với máy chủ trừ khi đến lượt của họ. (Tôi có thể yêu cầu máy chủ gửi cho họ cập nhật về những người chơi khác, nhưng không xử lý yêu cầu không đồng bộ.)
Yêu cầu cuối cùng:
Hiệu suất không phải là tối quan trọng. Điều này chủ yếu sẽ được sử dụng cho các trò chơi không phải thời gian thực, và chủ yếu là để đưa AI vào nhau, chứ không phải con người co giật.
Chơi trò chơi sẽ luôn luôn theo lượt (ngay cả khi ở độ phân giải rất cao). Mỗi người chơi luôn được xử lý một động tác trước khi tất cả những người chơi khác có lượt.
Việc triển khai máy chủ xảy ra trong Ruby, nếu điều đó tạo ra sự khác biệt.