Лично я бы посоветовал вам использовать дизайн на основе IOCP, но тогда я бы сказал, что, поскольку у меня есть фреймворк на основе IOCP, который я использовал в течение многих лет для разработки высокопроизводительных серверов для клиентов.
Недавно я собрал некоторые из причин, по которым предпочитаю IOCP другим моделям, доступным в Windows, и они доступны здесь, в моем блоге здесь.
Часто «сложность» приводится как причина избегать IOCP, но, честно говоря, если вы делаете что-то кроме «потока на соединение», код все равно будет достаточно сложным. У меня есть бесплатный набор кода C++ с примерами серверов, который вы Вы можете взглянуть на него, он выполняет всю работу IOCP за вас, а примеры серверов являются хорошей отправной точкой для вашего собственного кода. Вы можете получить его по адресу здесь.
В качестве альтернативы у меня также есть бесплатная (для некоммерческого использования) подключаемая серверная платформа, которая может вас заинтересовать. С WASP вы просто пишете dll с определенными точками входа, а я делаю всю работу по сети за вас... См. здесь для загрузки и здесь для руководства .
Какую бы модель вы ни выбрали, САМАЯ важная вещь, ИМХО, заключается в том, чтобы начать тестирование производительности и нагрузки с 0 ДНЯ. Таким образом, вы ЗНАЕТЕ, сколько одновременных подключений вы можете поддерживать на целевом оборудовании, и вы можете быстро обнаружить неподходящие проектные решения. которые вызывают это падение. Параллелизм вашего сервера легко растратить. См. здесь для получения дополнительной информации.
Поскольку Джей упомянул ENet... Я обнаружил, что наш ENet-сервер на основе IOCP хорошо работает со стандартным клиентским кодом Enet. Но помните, ENet разработан как одноранговый протокол, и поэтому возникают некоторые проблемы, когда вы начинаете пытаться использовать его на сервере. Со стандартным кодом ENet у вас, по сути, есть однопоточный сетевой насос, и это просто не может сравниться с масштабируемостью, которую вы получаете от IOCP. В итоге я переписал код обработки протокола ENet с нуля, чтобы он работал с асинхронным вводом-выводом и IOCP, и это нетривиальный объем работы. В настоящее время я работаю над новой версией этого кода, в которой в качестве основы используется новейший протокол ENet, и, надеюсь, он будет доступен в начале 2011 года с полным сравнением производительности со стандартным кодом ENet, используемым в большом количестве ситуаций с одновременным подключением к серверу.
person
Len Holgate
schedule
11.11.2010