Завтра у меня *большая и важная контрольная* по конструлям потому я зачем-то страдаю херней и решил наконец напостить в бложик. Тем более что есть о чем.
На работе случилась необходимость написать по-быстрому прототипчик сервера раздачи контента плагину для Adobe ID. Подключений много, все долгоживущие, но каждое по-отдлельности в основном простаивает.
На чем же писать асинхронный TCP сервер с потенциалом на несколько сотен, а то и тысяч, подключений? Поскольку пистон я не люблю выбор оказался между
Eventmachine и Erlang.
Helloworld'ы на eventmachine это действительно просто и сравнительно понятно. Сложная логика быстро превращается в спагетти из callback'ов. С этим приходиться бороться и даже иногда получается. Впрочем это проблема не столько Eventmachine, сколько event-based подхода вообще – тем же страдает
Node.js (впрочем Node еще много чем страдает :) )
Поскольку цели сделать финальный вариант не было, а OTP я не знаю, то решил без него. Заодно Erlang лучше "распробовал".
Erlang вполне ожидаемо выиграл и по производительности (почти линейно размазывается по ядрам, можно еще по нодам, но я не пробовал) и по прямолинейности кода (отсутствию callback'ов и конечных автоматов). Синтаксис по-началу заставляет тосковать по оному в Haskell, и похоже не только меня. Но быстро привыкаешь. Есть ощущение что по-дороге изобрел немного OTP.
Когда уже закончил с Erlang версией сервера увидел
Revactor. Можно лечить спагетти ценой ограничения кол-ва поддерживаемых платформ (только Ruby 1.9+), но императивную семантику Ruby все равно в мешке не утаишь. Производительность тоже, хотя 1.9 в этом плане получше. Насколько я понял автор сабжа полузабил и ушел делать
Reia.
При желании перед Ruby скрыптами можно поставить load-balancer и получить горизонтальную масштабируемость, еще через это можно обновлять код сервров за балансировщиком по-очереди, создавая видимость горячей замены кода. Но это более костыльное решение чем большой и счастливый Erlang всему. Тем более, что при использовании OTP эти ништяки получаются совсем сами собой (без OTP надо следовать некоторым соглашениям).
З.Ы.: У меня окончательно вызрела идея давно обещанной библиотеки анимации на JS. Надеюсь доживет в голове до лета.
З.З.Ы.: Старый добрый "Пушистик" получил воторое рождение на
HackDay.
З.З.З.Ы.: Быть может скоро напостю про курсовик и Android vs iPhone