Pull to refresh

Comments 33

Все руки не доходят опробовать эту либу, самое главное что интересует, как работает сеть, хотябы тест простейшего сервера, к примеру примера утилитой ab.

А так сам использую boost.
$ ab -n 10000 -c 1000  http://127.0.0.1:8001/hello

Document Path:          /hello
Document Length:        131 bytes

Concurrency Level:      1000
Time taken for tests:   1.276 seconds
Complete requests:      9040
Failed requests:        0
Write errors:           0
Total transferred:      2540240 bytes
HTML transferred:       1184240 bytes
Requests per second:    7086.35 [#/sec] (mean)
Time per request:       141.116 [ms] (mean)
Time per request:       0.141 [ms] (mean, across all concurrent requests)
Transfer rate:          1944.59 [Kbytes/sec] received

Connection Times (ms)
              min  mean[±sd] median   max
Connect:        0    1   3.3      0      24
Processing:     0    3  35.3      0    1128
Waiting:        0    2  35.2      0    1128
Total:          0    4  35.6      0    1129
ab не дает адекватных результатов, т.к. посылает одни и те же запросы, что быстро работает засчет кэширования. в таком случае и на VB можно написать сервер, который не дольше отработает эту серию.
дайте какую-нибудь тулзу или скрипт для посылки разных запросов. С удовольствием потестирую.
httperf. строит запросы на основе лога веб-сервера (nginx или apache, к сожалению, сейчас не вспомню). наступали на эти грабли, были довольны результатами ab пока не запустили маркетинг на проекте.
Интересная штука. Но логов у меня не имеется никаких, разве что что-то своё накопипастить.
UFO just landed and posted this here
Чисто субъективно: мне понравилось меншее нагромождение из шаблонов. И так как необходима была быстрая реализация слушающего сервера, то разбираться в boost и точнее, boost::asio не было времени. Попался бы пример реализации на boost, копал бы boost.
Раз уж минусуете, то не поленитесь сделать доброе дело: объяснить свою оценку. А то весьма странно получается.
Does tntnet run under Windows?

No. Tntnet do not run under windows. Until now nobody was willing to port tntnet to windows. But if you really want to have it, you can volunteer.

http://www.tntnet.org/faq.html

А в остальном на первый взгляд неплохая либа. Для линукс серверов может быть удобной.
Ну мне boost то нормально, но проблема в том, что другим программистам довольно сложно все это освоить, хочется что-то полегче.
>гораздо удобнее smart pointer (ну имхо конечно), чем тот же std::smart_ptr
А в чём именно?
мне нужно было внешнее управление ссылками на внутренний объект smart_ptr, которое бы работало в многопоточном режиме — реализация cxxtools::smartPtr для меня оказалось весьма удобно.
Да, похожее, но есть один момент, смотрите (исходник): строка 230
template <typename objectType,
             template <class> class ownershipPolicy = InternalRefCounted,
             template <class> class destroyPolicy = DefaultDestroyPolicy>
   class SmartPtr : public ownershipPolicy <objectType>,
                    public destroyPolicy <objectType> {

вот этот момент с ownershipPolicy — класс, который обеспечивает threadsafety счётчик ссылок на объект. Очень похожее с тем, на что вы дали ссылку в boost. Только реализация несколько иная.

В целом, это меня устраивает и тянуть boost реализацию в добавок нет необходимости. Я не говорю, что boost хуже или лучше, просто использую эту реализацию и её хватает.
На мой взгляд, примеры несколько громоздки…
UFO just landed and posted this here
Я правильно понимаю, что ни о какой асинхронности, как в boost::asio тут речи не идёт?
Тогда зачем это нужно?
Конкретнее, что вы имеете в виду? Запросы выполняются независимо один от другого в разных потоках.
на 1000 одновременных запросов cxxtools создаст 1000 потоков? Это не очень хорошо. Серверу лучше читать из сокетов асинхронно, а продолжительные команды отправлять на выполнение в пул потоков. Попробуйте всё таки разобраться с boost::asio, это будет не плохим бонусом к вашему резюме :)
не совсем. В простой демке для cxxtools: на каждый запрос создаются Job привязанные к одному потоку. В демке сервера tntnet уже пул потоков с очередью, в которой ожидают сокеты пока освободится поток. Я для себя пишу отдельно пул потоков с очередью используя из библиотеки только её реализацию TcpSocket (мне нужно по-своему органиовать это под задачу). Boost::asio изучу конечно, не всё сразу.
Блокируется ли выполнение потока на время выполнения запроса?
уточните вопрос. Один поток выполняют только одну свою задачу взятую им из очереди и больше его ничего не трогает в этот момент. Это detached поток и он не связан с другими никаким образом. Он блокируется в случае когда ничего не делает в ожидании появления новой задачи.
Чуток не в тему, но для C есть хорошая библиотека mowgli. Конечно, это не то же самое по функциональности, но многие вещи делает проще и удобнее.
Cxxtools вообще развивается? Судя по частоте выпуска новых версий(а последняя вышла почти полтора года назад) оставляет желать лучшего
Развивается, я списывался с разработчиками:
> Hi Tommi. I'm new user of yours framework and I'm much interested in this
> project. But at first I have some questions to you. 1) is this project
> still developing?
> 2) is any alive community present around?
> 3) are you interested in futher developments?

Hi,

just look at the svn log. There you can see, that cxxtools, tntnet and tntdb
are all alive. We use it in our day to day work also. We have a mailinglist
and a irc channel at freenode #tntnet. Feel free to ask if you have any
questions.
Cпасибо за статью,
тоже искал что-то подобное, пришлось много написать самому.
для работы с сокетами использую libevent
для http использую libcurl
Библиотека выглядит перспективной, но по объёму функционала пока сильно уступает тем же Boost и Qt. А это означает, что в определённый момент может понадобится тащить что-то из тех же Boost или Qt и устраивать смесь из нескольких фреймворков / библиотек. Что не очень хорошо.

Оффтоп: насколько я понял, автор собирается писать свой собственный HTTP-сервер. Если это не в учебных целях, то советую ещё раз хорошо обдумать, посмотреть/попробовать FastCGI, модули и плагины к open source web-серверам и только потом писать свой сервер. Проверено на собственном опыте. Не спорю, есть класс задач, где нужно изобретать велосипед и писать свой специализированный HTTP-сервер. Но он очень узок.
Уступает, не спорю. Так сложилось, что начал работу с этой библиотекой и она решает свой круг задач.

Re Оффтоп: По задаче да, пишется веб-сервер, и у меня именно тот случай, когда нужен собственный велосипед.
> 1) была free, 2) умела работать с сокетами и можно быстро было поднять свой сервер, 3) нужна была оббёртка над потоками для плюсов

boost::asio
не спорю, есть такой инструмент, но boost::asio сложнее. Мне нужно было быстро что-то сделать.
спасибо. Для чего-нибудь другого попробую boost::asio, а пока закопался с этим. Всё равно надо городить кучу проектной внутренней логики.
Sign up to leave a comment.

Articles