Tôi đang sử dụng Node.js và Redis. Tôi đang cố gắng đưa ra một cách đáng tin cậy để tự động hóa người chơi. Có một máy chủ phù hợp và sau đó nhiều máy chủ trò chơi được thiết lập.
Sau đây là những gì tôi cần phải xảy ra:
- Người chơi gửi yêu cầu tham gia với loại trò chơi (nhỏ / vừa, v.v.)
- Máy chủ phù hợp sẽ thêm người chơi vào loại trò chơi hiện tại đang chờ người chơi
- Máy chủ trò chơi gửi cho người chơi ID trò chơi
Hiện tại tôi đã thực hiện điều này như sau:
- Máy chủ phù hợp lắng nghe trò chơi: queue: small bằng BRPOP
- Kiểm tra nếu trò chơi: queue: small: id = id tồn tại
- Kiểm tra xem trò chơi: id: độ dài người dùng là <= 6 (người chơi tối đa)
- Thêm người chơi vào trò chơi: id: danh sách người dùng nếu có
- Nếu thời lượng trò chơi bây giờ là 6, nó sẽ xóa trò chơi: queue: small: id
Nếu máy chủ phù hợp tìm thấy trò chơi: queue: small: id bị thiếu, nó sẽ hoạt động như sau:
- Trò chơi INCR: nextGameId
- Đặt trò chơi: queue: small: id cho ID được tạo trước đó
- Thêm ID trò chơi vào trò chơi: queue: chờ đợi
Các máy chủ trò chơi chờ sử dụng BRPOP cho các trò chơi mới. Khi họ nhận được một, họ đợi cho đến khi trò chơi có tối thiểu 2 người dùng thì bắt đầu hẹn giờ. Nếu họ không điền vào thời gian đó, họ sẽ bắt đầu với những người dùng họ có và sau đó xóa trò chơi: queue: small: id (do đó buộc người mai mối yêu cầu một trò chơi mới).
Trong khi phương pháp của tôi đang hoạt động, tôi không tin nó sẽ hoạt động tốt trong sản xuất và nó có vẻ rất phức tạp. Tôi có thể thấy tiềm năng cho các vấn đề sau:
- Máy chủ trò chơi gặp sự cố sau khi chấp nhận ID trò chơi từ danh sách chờ dẫn đến việc người dùng được thêm vào trò chơi: id: người dùng nhưng không có gì xảy ra với họ (bản thân sự cố không phải là vấn đề, nhưng người dùng tiếp tục được thêm vào hàng đợi trò chơi đó là )
- Nếu người dùng ngắt kết nối và trò chơi chưa bắt đầu, máy chủ trò chơi sẽ xóa người dùng khỏi trò chơi: id: danh sách người dùng. Trong khi đang trong quá trình thực hiện điều đó, máy chủ mai mối có thể thêm người dùng vào danh sách và nghĩ rằng trò chơi đã đầy, do đó loại bỏ nó khỏi hàng đợi.
Suy nghĩ ban đầu của tôi là thay đổi thành một hàng người dùng đang chờ một loại trò chơi. Tuy nhiên, điều này trình bày thêm các vấn đề:
- Nếu máy chủ mà người dùng kết nối gặp sự cố, nó sẽ không xóa người dùng khỏi hàng đợi, do đó khiến người dùng đó được đưa vào trò chơi khi họ không tồn tại. Tôi có thể sử dụng các bộ được sắp xếp để lưu trữ thời gian của yêu cầu và thăm dò ý kiến khách hàng cho đến khi nhận được ID trò chơi nhưng điều này có nghĩa là tôi không biết khách hàng đó đã đợi bao lâu và do đó không biết có nên bắt đầu trò chơi không với ít người dùng hơn.
- Không đưa người dùng vào trò chơi, họ không có khả năng xem những gì người dùng đã tham gia, cũng không có khả năng trò chuyện với người dùng đang chờ đợi (vì điều đó yêu cầu ID trò chơi).
Không có cách nào tôi thiết lập điều này cảm thấy đúng vì vậy tôi đã hy vọng ai đó có thể đưa ra một số gợi ý tốt hơn. Tôi thực sự cần phải giữ các máy chủ trò chơi và máy chủ mai mối riêng biệt để phát triển chúng theo yêu cầu.