@andymitrich
Software Developer

Веб-сервер своими руками

Доброго времени суток. Господа, подскажите какие-нибудь маны по тому, как разработать свой сервер, что-то наподобие Selenium. Хочется именно свой велик, а не брать готовый. Спасибо.

P.S. Или не заморачиваться с поиском и залезть в исходники готовых продуктов и использовать их в качестве руководства?
  • Вопрос задан
  • 7224 просмотра
Решения вопроса 1
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Вот пара линков полезных: citforum.ru/programming/unix/sockets/ и allasm.ru/set_12.php
В целом логика под виндой и никсами одинаковая. Самое «сложное» в веб сервере — работа с сокетами. Работает примерно так:
1. Инициализируем сокеты;
2. Создаем (socket) — ОС выдаст нам новый сокет;
3. Настраиваем сокет (setsockopt);
4. Ассоциируем (bind) этот сокет с айпи и портом;
5. Начинаем «слушать»(listen) сокет — вообще, слушает ОС, а мы только обрабатываем данные;
6. В цикле принимаем (accept) соединения — accept возвращает управление и новый сокет как только появится запрос на указанные ранее порт и айпи (иначе INVALID_SOCKET вернет);
7. Начинаем асинхронный(для проверки/тестов все можно и в одном потоке делать) прием данных (recv) из полученного сокета;
8. Обрабатываем принятые данные.
9. Отправляем ответ (send);
10. После окончания приема закрываем сокет;
11. Возвращаемся в начало цикла — пункт 6.
Само собой при асинхронной обработке цикл будет только получать новые сокеты и отдавать их «воркерам» — рабочим потокам.
В скобках — вызовы апи сокетов, под линуксом почти все то же самое.
Под виндой все сокеты в Ws2_32.dll.
Если что непонятно — отвечу в меру своих знаний 8)
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
nochkin
@nochkin
Не думаю что есть толковые маны на эту тему с практической стороны, а теоретической стороны может быть недостаточно.
Возможно, идея с исходниками не такая уже и плохая.

Только Selenium это не сервер, а клиент. Он ведь автоматизирует браузер с клиентской стороны.
Ответ написан
romy4
@romy4
Exception handler
Почитайте цикл статей про 10000 соединений. Там ребята пишут свой сервер с нуля и сталкиваются с различными проблемами. Для базового понимания отлично подходит. Алгоритм, в принципе, как описал VoidVolker.
Ответ написан
Комментировать
savostin
@savostin
Еще один программист
mongoose прост для понимания (в исходниках)
сори, метки не заметил (а чего это я на питон подписан?)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы