Нужно написать многопоточное Ubuntu приложение.
Нужно написать многопоточное Ubuntu приложение.
Приложение будет использоваться как "прототип", под свои нужды я его буду допиливать сам.
Опыта написания кода под Linux системы у меня нет, на C писал мельком лет 10 назад, сейчас пишу на php - поэтому код должен быть читаемым и хотя бы немного коментированным (на уровне 1 комент на 1 задачу из функционала).
основной функционал описан ниже. Для тестирования нужен будет сервеный функционал, его я предоставлю.
* приложение нужно будет компилировать под ubuntu
* запускаться будет в формате "app 123 dkfjkjdkfk", где 123 dkfjkjdkfk цифровая и строковая переменные, количество типы переменных я буду допиливать сам
* может писать логи в текстовый файл (с указанием времени события с точностью до миллисекунд и текущего использования памяти программой) в формате
[2013-07-17 23:22:31.8781] [2.3 Mb] - message - function log($msg)
* может запрашивать урл ХХХ (с сохранением cookies между запросами - можно юзать сurl, если он поддерживает многопоточность) - function request($url,$postvars = array(), $cookies=null)
* может связываться с базой данных mysql
* основной цикл
** приложение отправляет POST запрос на урл http://server.com/login.php (с логином\паролем\служебными данными)
** приложение сохраняет куки в файл
** приложение устанавливает соединение с mysql
** приложение sleepает до наступления времени HH:MM:SS
** приложение создает 200 потоков
*** в каждый поток передается случайное число миллисекунд, время HH:MM:SS, переменные для запроса
*** поток ждет до наступления времени HH:MM:SS.ms
*** дальше в цикле поток делает 1000 раз
**** поток делает GET запрос на урл http://server.com/buy.php, сохраняет точное время запроса
**** поток анализирует регэкспом полученные данные, [CODE: (\d+)], сохраняет время получения ответа (с точностью до миллисекунд) и код, при получении кода SUCCESS поток
прекращает работу и возвращает отладочные данные array(array(timeStart, resultCode,timeEnd), ...)
**** при возникновении ошибок (таймаута\других ошибок) - код ошибки идет родителю
**** при принудительном прекращении работы потока он должен вернуть родителю отладочные данные - array(array(timeStart, resultCode,timeEnd), ...)
** родитель висит пока работают потоки потомки, если один из потомков вернул код SUCCESS - родитель принудительно прекращает работу остальных потомков, собирает у них отладочные данные и сохраняет
их в файл
** плюс родитель должен раз в 15 секунд делать mysql запрос вида SELECT * FROM tasks WHERE id=XXX и если поле
STATUS==SUCCESS - завершать работу потоков и сохранять отладочные данные (возможно, делать это в новом потоке)
Требования к приложению
- реализовал подобную систему на php + fork, но при сотне\тысяче потоков плужение нереальное :(, поэтому скриптовые языки не подходят
- Язык желательно C или "C-подобный" язык
Бюджет
- до $500 если вы реально профи, гарантируете скорость работы приложения и готовы будете при необходимости оперативно помогать допиливать софт за доп $$. Сроки разработки неделя-две.
- до $200 если вы в общих чертах в курсе, что к чему, если у вас есть опыт программирования и вы не против взяться за это и готовы гарантировать сроки не больше месяца.