Tôi đang viết mạng phía máy chủ của trò chơi nhiều người chơi. Trò chơi là một game nhập vai và nó có công suất tối đa tuyệt đối 2000 người chơi, nhưng thực tế nó sẽ tối đa ở khoảng 300 người chơi, mặc dù nó có thể cao hơn hoặc thấp hơn. Trong thời gian dài nhất, mỗi lần tôi phải kết nối mạng với nhiều khách hàng, tôi đã mắc kẹt với NIO vì nó không yêu cầu sử dụng hàng trăm chủ đề. Gần đây, tôi đã chạy vào một bản trình bày PowerPoint, nơi nó mô tả chi tiết hai mô hình, và nó gần như làm cho mô hình thread-per-client có vẻ vượt trội so với NIO. Tôi cũng đã tìm thấy những nơi mà nó nói rằng IO cũ thực sự có thể tốt hơn NIO là tốt.Chủ đề I/O cũ cho mỗi mô hình máy khách hoặc mẫu lò phản ứng NIO?
Có thể tìm thấy PowerPoint tại đây (hơi cũ): http://www.mailinator.com/tymaPaulMultithreaded.pdf.
Tôi chưa viết bất kỳ nội dung nào, vì vậy sẽ không có vấn đề gì nếu tôi phải bắt đầu lại từ đầu nếu tôi phải thay đổi toàn bộ thiết kế mạng của mình. Tôi không bị áp lực trong thời gian. Ban đầu, tôi đã thiết kế triển khai thực hiện mẫu lò phản ứng với NIO (chọn một sự kiện, gửi một trình xử lý để xử lý sự kiện).
Thông tin thêm có thể được tìm thấy ở đây: http://en.wikipedia.org/wiki/Reactor_pattern
toàn bộ thi hành lò phản ứng của tôi được thiết kế để sử dụng một chủ đề duy nhất. Kể từ khi tôi đọc rằng IO cũ có thể hoạt động tốt hơn, nó thực sự đưa tôi vào tình thế tiến thoái lưỡng nan. Tôi không muốn thiết kế một hệ thống NIO phức tạp sử dụng nhiều luồng chỉ để tận dụng toàn bộ sức mạnh của CPU, nhưng tôi cũng rạn nứt với ý tưởng có một ứng dụng đơn lẻ sử dụng hơn 300 luồng. Thiết kế nào phù hợp với mục đích của tôi? Lợi thế của thread cho mỗi khách hàng là nó thực sự sử dụng khai thác tất cả sức mạnh của CPU bằng tự nhiên, nhưng đồng thời, nó bogs xuống hệ thống. Chưa kể, kích thước ngăn xếp của một sợi đơn chiếm rất nhiều bộ nhớ (khi nhân với vài trăm lần). Tôi có nên dính vào mẫu lò phản ứng không?
Tôi biết câu hỏi này hơi mơ hồ, nhưng tôi cảm thấy rằng tôi cần đặt câu hỏi cụ thể cho tình huống của mình vì tôi không thể tìm thấy câu hỏi trên trang web này cũng như trang web giải quyết vấn đề của tôi. Có một trò chơi về trò chơi, nhưng trò chơi có ý nghĩa để xử lý hàng chục nghìn người chơi.
Cảm ơn rất nhiều! Nếu bạn cần bất kỳ làm rõ, xin vui lòng yêu cầu!
Xin lỗi @Martin. Tôi có nghĩa là giữ cho nó đơn giản với mô hình thread-per-client. – Gray
Vì vậy, bạn nghĩ rằng 300 chủ đề trên đầu trang của "500" là 'không đáng kể'? –
Tôi không có ý kiến thảo luận, nhưng nếu tôi liên tục viết dữ liệu cho khách hàng từ xa và đọc từ khách hàng đó thì sao? –