Да быстрый, но почему ? Несомненно Node JS использует быстрый движок V8 о котором я рассказал в предыдущей статье однако при всей быстроте - это капля в море, а более важно что он использует обертку над websocket (что это такое я так же рассказывал в другой статье) - Socket IO и это не что то присущее только Node JS или Java Script в целом, а некий архитектурный подход в клиент-серверном взаимодействии. Одним из главных его преимуществ является добавление неких каналов "Channel" являющиеся второстепенными websocket серверами в которые вы шлете ОДИН большой пакет со списком кому его отправить, а Channel в свою очередь рассылают ВСЕМ , тем самым ваш игровой сервер тратит время только на отправку одного TCP пакета (условно их может быть несколько , например разным группам пользователей), а время на отправку непосредственно игрокам тратится в другом потоке Thread не тормозя игровой сервер. И этот подход вы можете реализовать на другом языке программирования без изменения стека (я рассказал в одной из первых статей что это большой обман что игровые сервера можно писать только на С++, С#, Go, Node JS и др )
На PHP? Ну сразу бы сказал, что участвуешь в схеме по распилу.
А потом удивляются, почему для игр от таких погромистов нужна 4090 и сервера больше 50 игроков не держат ;)
нет не участвую. то что никто это не делал не значит что это не будет работать.
у меня же работает . прототип есть рабочий на http://my-fantasy.ru
эх щас бы все в распилы записывать.
есть момент в блокировке TCP сообщениями сервера, проверки на получения данных, повторные отправки пакетов, но и не нужно отправлять пакеты в ветке Thread процесса сервера игровых механик о чем пойдет речь ниже
Неблокирующий ввод/вывод есть как для tcp так для udp. Минус tcp для систем реального времени является продолжением его плюсов - подтверждение доставки, сохранения порядка следования данных, гарантия целостности данных. Работа этих механизмов в условиях нестабильной сети приводит к непредсказуемым задержкам при доставке данных, которые для пользователя выглядят как глюки игры. Минус udp в усложнении сетевого кода, т.к. часть фичей tcp приходится реализовывать самостоятельно
вы правы в TCP есть асинхронные режим отправки данных часто с callback функциями. Но проверка на то отправился ли пакет происходит раз в тик процессора и при этой проверки процесс что ее запрашивает блокируется хоть и на гораздо меньшее время.