Поэтому я пишу систему организации шахматных матчей, основанную на представлении лобби с игровыми комнатами, общим чатом и т. Д. Пока у меня есть рабочий прототип, но у меня есть большие сомнения относительно некоторых вещей, которые я сделал с сервером. Написание сервера игрового лобби для меня - новый опыт программирования, и поэтому у меня нет ни четкой, ни точной модели программирования для него. Я также не мог найти бумагу, которая описывает, как это должно работать. Я заказал «Java Network Programming 3rd edition» у Amazon и все еще жду отгрузки, надеюсь, я найду некоторые полезные примеры / информацию в этой книге.
Тем временем я хотел бы собрать ваше мнение и посмотреть, как вы справитесь с некоторыми вещами, чтобы я мог научиться правильно писать сервер. Вот несколько вопросов из головы: (может быть, еще будет)
Сначала давайте определим, что делает сервер. Его основная функция - поддерживать TCP-соединения с клиентами, слушать события, которые они генерируют, и отправлять их другим игрокам. Но есть ли что-то большее, чем это?
Должен ли я использовать один поток на клиента? Если так, 300 клиентов = 300 потоков. Не слишком ли это много? Какое оборудование необходимо для поддержки этого? А сколько пропускной способности потребляет лобби, то приблизительно?
Какую структуру данных следует использовать для хранения клиентских сокетов? Как вы защищаете его от одновременной модификации (например, игрок входит в лобби или существует в нем) при итерации по нему, чтобы отправить событие без ущерба для пропускной способности? Является ли ConcurrentHashMap правильным ответом здесь, или я должен знать некоторые методы?
Когда пользователь входит в лобби, какой механизм вы бы использовали для передачи ему состояния лобби? И пока это происходит, где всплывают другие события?