Как стать автором
Обновить

Комментарии 25

Спасибо за пост. Может стоит перенести его в блог?
я долго думал куда, и до сих пор сомневаюсь, но про руби то толком то тут мало, он слишком кростемовый
и руби и тестирование и другое…
хотя буду думать!
не понятно, тишина,
текст слишком длинный?
или тема не интересна?
:(
После прочтения мне на мгновение показалось, что это довольно тонкий сарказм. Я сам довольно хорошо отношусь к Ruby, очень нравится Rails, но Вы, скорее, показали недостатки Ruby, нежели его достоинства. Дав Вам немного синтаксического сахара для решения несложной задачи отправки http-запросов, руби к чертям подвешивал Ваши системы. И то, что в итоге пришлось использовать интерпретор под JVM — не есть хорошо.
Возможно вы невнимательно читали, я повторюсь
Подвешивал Ruby под Windows,
Под OSX и Linux — он вел себя сильно по другому, это раз ;)

«Все говорят» — что для таких задач Ruby не подходить, как вывод — подходит, надо только думать головой. Это два.

Syntax shugar — без этих плюшек, я бы вообще не брался за эту задачу, это был фан, это три

Я не программист — это четыре :)

Простите, но то, что Ruby подходит для таких задач я увидел из комментария mgyk, но никак не из Вашего поста. Хотя я очень ценю Вашу инициативу и желание поделиться своим опытом
За что mgyk, и огромное, отдельное спасибо ;)
Собственно вопрос то в том что я свою задачу решил, и не будь основной системой Windows — на эти грабли я бы и не наступил.

Одна из мыслей, зачем писать, была показать что такие вещи можно делать и самому, не то чтоб это очень страшно, все решаемо.
Понятно, спасибо. Полезно. А Windows был какой версии?
Win7/64
Winxp/32
Хабраэффект. Нагрузим сервер по-быстрому :)
хм, похоже я зря столь не внимателен к Ruby
зря, очень приятный язык.
Была похожая проблема — решил на python с помошью библиотеки gevent. Навешал ей сколько нужно задач (суммарно), прицепил задачи к Pool с максимальным количеством одновременных задач в N, в конце каждой задачи sleep на 10 секунд.

И никакого шаманства с jruby и JVM — простой си-экстенш для языка.
не, эт не интересно, идея была чистый скриптовый язык…
p.s. где-то услышал что Ruby это гремучая смесь Perl + Python :)
Perl — мой основной скриптовый до ruby, фразу услышал уже после.
Люблю питон за более read-frendly синтаксис) А так да — это именно она и есть ))
Использовали бы асинхронные сокеты, бегало бы огого как шустро. а 2000 потоков на одной системе это слишком сурово.
ну я и свел все к n/10 потоков
причем на Linux — оно бегало, похоже в виндовой реализации некие грабли :(

а про асинхронные сокеты, это в следующий раз, но не хотелось опускаться очень низко, это бы весь фан убило…

Можете посмотреть на EventMachine + EM.synchrony + EM::HttpClient
У себя на машине спокойно поднимал 8к клиентов которые слали запрос на мой же локальный сервер, тоже на (EM) получалось около 40к запросов в секунду.
EM.synchrony do
  client = EventMachine::Synchrony::ConnectionPool.new(size: 2000) do                
    EventMachine::connect('127.0.0.1', 5000, Client)    
  end
  EventMachine::PeriodicTimer.new(5) do
    p EM.connection_count
  end
end    
ух ты, спасибо, буду смотреть
под асинхронными сокетами я, кстати, это и подразумевал
Чёрт, изящно)
А почему не пробовали Ruby 1.9.x? Он же побыстрее 1.8 будет, причем значительно.
Watir требует 1.8.7
На 1.9 не работает

Хотя надо попробовать, спасибо за мысль
Спасибо за отличный опыт, обязательно попробую. Мне как раз нужно сильно нагрузить почтовый сервер, попробую справиться обернув вашим кодом
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.