Piszę sieciową grę wieloosobową po stronie serwera. Gra jest grą RPG i ma absolutną maksymalną pojemność 2000 graczy, ale praktycznie maksymalna liczba graczy wynosi około 300, choć może być wyższa lub niższa. Najdłużej, za każdym razem, gdy musiałem tworzyć sieci, w których uczestniczyło wielu klientów, utknąłem w NIO, ponieważ nie wymagało to użycia setek wątków. Niedawno natknąłem się na prezentację PowerPoint, w której szczegółowo opisano dwa modele, i prawie sprawił, że model wątku na klienta wydaje się lepszy od NIO. Znalazłem też miejsca, w których stwierdza się, że stary IO może również przewyższyć NIO.Stary wątek we/wy na model klienta lub wzór reaktora NIO?
Program PowerPoint można znaleźć tutaj (jest nieco stary): http://www.mailinator.com/tymaPaulMultithreaded.pdf.
Nie napisałem jeszcze żadnej treści, więc nie byłoby dla mnie problemem zacząć od początku, gdybym musiał zmienić cały projekt sieciowy. Nie jestem pod presją czasu. Początkowo projektowałem implementację wzorca reaktorowego z NIO (wybierz zdarzenie, wyślij handler'a do obsługi zdarzenia).
Więcej informacji można znaleźć tutaj: http://en.wikipedia.org/wiki/Reactor_pattern
Moja cała realizacja reaktor jest przeznaczony do korzystania z pojedynczej nici. Odkąd przeczytałem, że stary IO może przewyższyć wyniki, faktycznie postawił mnie w dylemacie. Nie chcę projektować skomplikowanego systemu NIO, który wykorzystuje wiele wątków, aby w pełni wykorzystać moc procesora, ale też żartuję, że pojedyncza aplikacja używa ponad 300 wątków. Który wzór pasuje do mojego celu? Zaletą wątku na klienta jest to, że naprawdę wykorzystuje on całą moc procesora z natury, ale jednocześnie maskuje system. Nie wspominając o tym, że rozmiar pojedynczego wątku zajmuje dużo miejsca (po pomnożeniu przez kilkaset razy). Czy powinienem trzymać się wzorca reaktora?
Wiem, że to pytanie jest trochę niejednoznaczne, ale uważam, że muszę zadać pytanie dotyczące konkretnie mojej sytuacji, ponieważ nie mogłem znaleźć pytania na tej stronie ani na stronie internetowej, na której jest mowa o moim rodzaju. Było coś o grze, ale gra miała obsłużyć dziesiątki tysięcy graczy.
Wielkie dzięki! Jeśli potrzebujesz wyjaśnienia, zapytaj!
Sorry @Martin. Chodziło mi o to, aby zachować prostotę z wzorem wątku na klienta. – Gray
Więc myślisz, że 300 wątków na górze "500" jest "nieistotnych"? –
Nie mam ochoty na dyskusję, ale co, jeśli ciągle piszę dane do zdalnego klienta i czytam od tego klienta? –