Разработать простейший WEB server, отвечающий следующим требованиям:
1) Возвращает статический HTML контент (CGI не нужны).
2) Однопроцессный, но многопоточный.
3) Рассчитан на большое количество одновременных запросов.
4) Корректно возвращает HTTP коды ошибок и заголовки.
5) Никаких стронних библиотек — только STL, posix, glibc
6) Сервер должен компилироваться и запускаться под Linux. "
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Нескромный вопрос — что за вакансия? А если не секрет, то и что за контора?
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
Все правильно. Проверяют три вещи:
1) умение пользоваться гуглом (задача — найти готовый опенсорсный проект с заданными характеристиками);
2) базовые знания svn/git/etc (найденный проект надо как-то скопипастить);
3) навыки рефакторинга (чтобы не спалили).
Ну да: лошадь кушает овёс, Волга впадает в Каспий, а некоторые конторы (типа mail.ru или рамблер-а) требуют выполнения тестового задания, похожего на это.
искренне Ваш К.О.
R>>Нескромный вопрос — что за вакансия? А если не секрет, то и что за контора?
H>Программист С++. H>Контора — ее имя слишком хорошо известно в узких кругах
Здравствуйте, Handie, Вы писали:
DB>>Реализация в простейшем виде не должна занять больше 500 строк кода.
H>Так надо еще все коды ошибок возвращать Boost — низзя. libevent/libev/libuv — низзя. epoll напрямую
Звери.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям:
H>3) Рассчитан на большое количество одновременных запросов.
Большое — это сколько, интересно ? Сто, тысяча, много тысяч ?
H>4) Корректно возвращает HTTP коды ошибок и заголовки.
Фиг его знает, какое-то размытое требование. Они что, хотят полноценный HTTP-сервер с
content negotiation, accept-range и сжатием ? Наверное, можно на все штатные GET-запросы
возвращать HTTP/1.0 200 OK, Content-Length и body, а на все остальное 400 Bad Request.
И пускай потом только заикнутся о том, что это некорректно.
H>5) Никаких стронних библиотек — только STL, posix, glibc
М-да... Нет, я все понимаю, но без сторонних либ это ж сколько кода лишнего писать !
Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine,
которая парсит статусную строку, вытаскивает URL, заголовки и т.д.
Только это пока напишешь да протестируешь, уже уйдет прилично времени, боюсь даже
предположить, сколько именно.
H>Душевные ребята
Это точно. Душевные ребята, и задания у них душевные.
Здравствуйте, Yarik_L, Вы писали:
Y_L>Все правильно. Проверяют три вещи: Y_L>1) умение пользоваться гуглом (задача — найти готовый опенсорсный проект с заданными характеристиками);
5) Никаких стронних библиотек — только STL, posix, glibc
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята
отправьте им ссылку на http сервер из примеров к asio, и скажите что Вы выполнили задание на 83%
О, я кажется тоже общался с этими ребятами :)
правда, я нашел работу раньше, чем они проверили задание.
если писать в труъ-стиле, то в 500 строк вписаться реально, но не факт, что они такое хотят увидеть.
Здравствуйте, Handie, Вы писали:
H>Вот, предложили сделать забавное заданице
H>Разработать простейший WEB server, отвечающий следующим требованиям: H>1) Возвращает статический HTML контент (CGI не нужны). H>2) Однопроцессный, но многопоточный. H>3) Рассчитан на большое количество одновременных запросов. H>4) Корректно возвращает HTTP коды ошибок и заголовки. H>5) Никаких стронних библиотек — только STL, posix, glibc H>6) Сервер должен компилироваться и запускаться под Linux. "
H>Душевные ребята :-)
Здравствуйте, okman, Вы писали:
O>Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine, O>которая парсит статусную строку, вытаскивает URL, заголовки и т.д. O>Только это пока напишешь да протестируешь, уже уйдет прилично времени, боюсь даже O>предположить, сколько именно.
Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться :)
Здравствуйте, vayerx, Вы писали:
V>Здравствуйте, okman, Вы писали:
O>>Уже просто для обработки входящего GET-запроса нужна целая HTTP state machine, O>>которая парсит статусную строку, вытаскивает URL, заголовки и т.д. O>>Только это пока напишешь да протестируешь, уже уйдет прилично времени, боюсь даже O>>предположить, сколько именно.
V>Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться
Сысоев обошелся вот такой простенькой стейт-машиной (из node.js)
enum state
{ s_dead = 1 /* important that this is > 0 */
/* Important: 's_headers_done' must be the last 'header' state. All
* states beyond this must be 'body' states. It is used for overflow
* checking. See the PARSING_HEADER() macro.
*/
Здравствуйте, Handie, Вы писали:
H>Здравствуйте, vayerx, Вы писали: V>>Не так уж и много, как может показаться вначале. У GET-запроса довольно простая структура — в 17-20 простых состояний вполне можно уложиться :)
H>Сысоев обошелся вот такой простенькой стейт-машиной (из node.js)
там состояния и для запроса и для ответа. кроме того, например, для разбора http-версии выделять состояние на каждую букву не обязательно — можно сделать функционально. ну а в целом — таки да, примерно так :)