Что читать, чтобы получить знания по серверному программированию C/C++?

Написал приложение под iOS, теперь надо написать серверную часть. Для эффективности обработки запросов думаю писать на C/C++, но т.к. в сетевом программировании я дуб дубом, что можно почитать? Хотелось бы в общих чертах представлять как работает обработка запросов синхронно/асинхронно, или быть может еще как-то.
  • Вопрос задан
  • 3939 просмотров
Пригласить эксперта
Ответы на вопрос 4
nekipelov
@nekipelov
Классика жанра: UNIX Network Programming Ричарда Стивенса. Там очень много полезной информации. Даже если сервер будет работать под Windows, большая часть этой и=информации будет актуальной. Ну а уже после прочтения интересуйтесь такими вещами, как epoll и kqueue.
Ответ написан
@hsc
full stack python back-end developer
Очень многое зависит от протокола обмена данными, который вы выберете для своего приложения. Если Вам удастся подстроить поток данных под http, то, наверное, есть смысл взглянуть на технологии отличные от C/C++. Например, как вариант, можно смотреть на python. Для него реализована масса http-серверов всех мастей. Данный выбор хорош тем, что, во-первых, позволит быстрее написать прототип системы, даже если Вы не знакомы с python, ведь Вам не придется изучать основы сети, а достаточно будет воспольоваться высокоуровневыми абстракциями, а это значит, что время на изучение сети можно будет потратить на дополнительный ЯП. Во-вторых, Вы сможете куда более легче и быстрее прикрутить сторонние приложения типа redis, memcached, всевозможных БД и пр. В третьих, этот вариант хорош более легким масштабированием. Вам могут также посоветовать python и сказать, что в случае необходимости критичные к скорости участки программы можно будет переписать на С, но мой Вам совет — рассматривайте этот аргумент в последнюю очередь. Но это вариант не без минусов: скорость python куда более медленней чем С/С++. На моей практике был случай, когда python просел на вычислениях в ~50 раз. Тут очень много зависит от задач сервера. Во-вторых, потребляется побольше ресурсов. Готовьтесь к приростам в 5-10раз.

Сам по себе http уже сможет гарантировать доставку данных и наложит некоторые правильные ограничения на их поток. Кроме того, он позволит несколько проще управлять кешированием, что тоже немаловажно.

Если же все-таки решите писать свой протокол на основе TCP/IP или UDP взгляните на boost::asio. В мире С++ он зарекомендовал себя как достаточно быстрый и эффективный тулкит для работы с сетью. Документация у него средненькая, часто нужно будет бегать по форумах, но основные вещи описаны нормально. Есть примеры. Также, для более быстрого входа в тему программирования сети с опусканием нюансов очень низких уровней можно взглянуть на документацию по сети в Qt. Там описано много нюансов, даны очень хорошие примеры, можно подсмотреть много хороших практик проектирования сетевых подсистем.

Напоследок скажу, что если на С/С++ выбор падает из-за возможно большей производительности, то не забывайте, что от сети зависит только часть производительности, но есть еще и управление памятью, ресурсами, задачами сервера (читай тредами) и т.д. Готовы ли Вы к этому?
Ответ написан
Комментировать
alexyat
@alexyat
iOS Developer
Могу посоветоват то же самый obj-c, т.к. Вы уже с ним знакомы, вы быстро напишете свой веб сервис objective-cloud.com - это платный. Есть много опен сорс либ, которые можно найти через гугл по запросу objective c web, и потом взять себе vps или dedicate с mac os
Ответ написан
AxisPod
@AxisPod
Сразу же реализовать на C++ серьезное сетевое решение будет совсем не просто, даже с использованием готовых библиотек. Может проще взять node.js? Работает асинхронно, главное понять модель асинхронной работы. По сути boost::asio так же работает асинхронно. Сначала действительно стоит попробовать асинхронность на node.js, на это хватит и дня, далее поглядеть примеры использования boost::asio, в библиотеке примеров много и дальше решить. Но будет однозначно не просто, постоянно будут лезть различные камни, будут утечки памяти и т.д.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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