Подскажите, я один такой, кто до сих пор использует чистые сокеты без всякой обертки типа asio, ACE, poco, libevent и т.п.
И при этом умудряюсь писать на нем примитивные HTTP, DHCP, TFTP серверы. И они даже работают )))
Или все же стоит обратить внимание на одну из библиотек? Если да, то какую по рекомендуете?
Здравствуйте, Nuzhny, Вы писали:
N>Я давно на boost::asio перешёл.
Вроде как если не хочешь с собой тащить весь boost, можно asio отдельно юзать.
Ну и вроде как где-то я читал, что в следующих стандартах (С++14, С++17, ...) ее может постигнуть судьба boost::thread, т.е. может стать std::asio.
Даже на С использовать сокеты напрямую — это откровенная перверсия.
Но и с использованием сторонних библиотек тоже все не так просто.
Обычно проблема заключается в их крайне низкой гранулированности.
Вместо нескольких отдельных библиотек, реализующих обертки над системными API, и некоторой высокоуровневой библиотеки, предлагающей стандартный набор операций (доступный на всех платформах), обычно предлагают франкенштейна, где все это намешано где-то в потрохах.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Здравствуйте, VTT, Вы писали:
VTT>Даже на С использовать сокеты напрямую — это откровенная перверсия. VTT>Но и с использованием сторонних библиотек тоже все не так просто.
Здравствуйте, dosik, Вы писали:
D>Подскажите, я один такой, кто до сих пор использует чистые сокеты без всякой обертки типа asio, ACE, poco, libevent и т.п. D>И при этом умудряюсь писать на нем примитивные HTTP, DHCP, TFTP серверы. И они даже работают ))) D>Или все же стоит обратить внимание на одну из библиотек? Если да, то какую по рекомендуете?
А как ты работаешь с несколькими соединениями? Если пускаешь отдельный поток на каждое соединение, это очень неэффективно. Если пишешь руками асинхронный код, на мой взгляд там много неинтересного кода, в котором можно ошибиться. К тому же этот код очень критичен к уязвимостям, всякие buffer overflow и тд.
Здравствуйте, vsb, Вы писали:
vsb>А как ты работаешь с несколькими соединениями? Если пускаешь отдельный поток на каждое соединение, это очень неэффективно.
Зачем, отдельный поток на select/epool а при срабатывании в зависимости от приложения:
— в случае высокой нагруженности или высокой длительности обработки запоса задачу в очередь для заранее запущенного пула потоков;
— если время терпит и обработка запроса не долгая, могу прямо внутри цикла обработать;
vsb>Если пишешь руками асинхронный код, на мой взгляд там много неинтересного кода, в котором можно ошибиться. К тому же этот код очень критичен к уязвимостям, всякие buffer overflow и тд.
Вот по именно по этой причине, а именно с появлением очередной задачи и пониманием, что придется много копипастить и родилась эта ветка.
Пока для себя решил все свои наработки объединить в свою либу, попробовать родить своего asio-клона, время терпит, пару дней убью, посмотрю.
Здравствуйте, dosik, Вы писали:
vsb>>Если пишешь руками асинхронный код, на мой взгляд там много неинтересного кода, в котором можно ошибиться. К тому же этот код очень критичен к уязвимостям, всякие buffer overflow и тд. D>Вот по именно по этой причине, а именно с появлением очередной задачи и пониманием, что придется много копипастить и родилась эта ветка.
D>Пока для себя решил все свои наработки объединить в свою либу, попробовать родить своего asio-клона, время терпит, пару дней убью, посмотрю.
Здравствуйте, Gomes, Вы писали:
G>Здравствуйте, dosik, Вы писали:
D>>Или все же стоит обратить внимание на одну из библиотек? Если да, то какую по рекомендуете?
G>Винда? Линух?
Кросплатформенно, в том числе macOS. Да уже свою написал и успешно юзаю )))