Я бы порекомендовал вам еще раз взглянуть на node.js . Одна из самых больших проблем с использованием библиотек для выполнения основанного на событиях программирования на объектно-ориентированном языке программирования (а не с использованием языка программирования на основе событий в первую очередь) заключается в том, что обычно все другие существуют библиотеки не основаны на событиях, и смешивать основанный на событиях и синхронный ввод / вывод очень неудобно. На самом деле, это в значительной степени невозможно, точнее сказать, возможно , но в первую очередь уничтожает все преимущества использования ввода-вывода на основе событий. (Обратите внимание, что практически любая сторонняя библиотека, которую вы используете (и библиотеки, которые они используют и т. Д.), Включая стандартные и базовые библиотеки самого языка, должна быть основана на событиях, чтобы фактически воспользуйтесь преимуществами. В противном случае вы потратите большую часть времени своего проекта на написание асинхронных оболочек вокруг существующих библиотек.)
Теперь, если использование библиотек на основе событий - такая плохая вещь, то почему я рекомендую node.js? Все просто: ECMAScript не не имеет каких-либо синхронных библиотек ввода / вывода (из-за простого факта, что у него вообще нет библиотек ввода / вывода вообще ), поэтому проблема смешивания просто не возникает. (На самом деле, он имеет некоторые библиотеки ввода / вывода, такие как XmlHttpRequest
или веб-сокеты, но угадайте, что: это уже все на основе событий.)
node.js сам реализует все библиотеки ввода-вывода, все они основаны на событиях, без требований обратной совместимости или устаревших требований.
В противном случае каждый язык или платформа имеет некоторые библиотеки событий или асинхронного ввода / вывода: в Ruby есть EventMachine и Rev , в .NET есть Rx , JVM имеет NIO , Unix-системы имеют kqueue / epoll, C имеет libev и libeio (поверх которого находятся node.js и Rev собраны), Perl имеет AnyEvent (построено поверх libev того же автора) и т. Д.