Russian Qt Forum

Qt => Работа с сетью => Тема начата: Xeon от Октября 18, 2009, 17:48



Название: Стек или потоки?!
Отправлено: Xeon от Октября 18, 2009, 17:48
Здравствуйте!
Мне интересен такой вопрос: как лучше организовать серверное приложение (С++), у которого, возможно, много клиентов, с помощью стека или потоков? Т.е. как организовать соединения?


Название: Re: Стек или потоки?!
Отправлено: SABROG от Октября 18, 2009, 18:53
Под стеком подразумевается бесконечный цикл в одном потоке, который обрабатывает все соединения?

Я бы наверно вынес в отдельные потоки. В зависимости от мощности системы ограничил бы количество потоков скажем до 50 и разделил количество клиентов на количество потоков. Можно например повесить на один поток 50 клиентов, при подключении нового клиента создается еще один поток и новые клиенты добавляются уже в него. Возможно как-то перемещал бы клиентов между потоками, чтобы можно было освободить ресурсы. Типа дефрагментация.


Название: Re: Стек или потоки?!
Отправлено: Xeon от Октября 18, 2009, 19:05
SABROG да именно так. :)
А не можешь подсказать какие плюсы и минусы у кахдого из способов, или где можно почитать об этом?


Название: Re: Стек или потоки?!
Отправлено: BRE от Октября 18, 2009, 19:10
А не можешь подсказать какие плюсы и минусы у кахдого из способов, или где можно почитать об этом?
http://www.opennet.ru/base/dev/server_way.txt.html


Название: Re: Стек или потоки?!
Отправлено: Xeon от Октября 18, 2009, 19:39
BRE Спасибо!
Может кто посоветует хорошую книжку по написанию сетевых приложений?! :)


Название: Re: Стек или потоки?!
Отправлено: BRE от Октября 18, 2009, 19:52
Может кто посоветует хорошую книжку по написанию сетевых приложений?! :)
Классика:
У. Р. Стивенс, Б. Феннер, Э. М. Рудофф
UNIX. Разработка сетевых приложений



Название: Re: Стек или потоки?!
Отправлено: Xeon от Октября 18, 2009, 19:56
BRE, а под Windows чтонить посоветуешь? :)


Название: Re: Стек или потоки?!
Отправлено: BRE от Октября 18, 2009, 19:58
BRE, а под Windows чтонить посоветуешь? :)
Нет.  ;)  ;D


Название: Re: Стек или потоки?!
Отправлено: Xeon от Октября 18, 2009, 20:00
BRE, жаль :)
А какой из способов написания сервера тебе больше по душе?


Название: Re: Стек или потоки?!
Отправлено: BRE от Октября 18, 2009, 20:02
А какой из способов написания сервера тебе больше по душе?
А какое количество клиентов планируется обслуживать одновременно?


Название: Re: Стек или потоки?!
Отправлено: Xeon от Октября 18, 2009, 20:21
Планируется больше 1000, а то и 2000.


Название: Re: Стек или потоки?!
Отправлено: Rcus от Октября 18, 2009, 20:28
А почему бы не использовать Boost::Asio? Она внутри использует нативные средства (kqueue|/dev/poll|epoll|whatever). Имеет удобный API для асинхронного чтения/записи. И масштабируется без особых проблем при помощи пула потоков.


Название: Re: Стек или потоки?!
Отправлено: BRE от Октября 18, 2009, 20:30
Планируется больше 1000, а то и 2000.
Ну это уже не мало. Не решусь, что то советовать, тебе самому перед началом разработкой необходимо хорошо представлять что ты делаешь.

Вот глянь еще статьи:
http://www.kegel.com/c10k.html (!!!)
http://greenmice.info/ru/node/115 (здесь интересна первая теоретическая часть)
http://sysoev.ru/nginx/ (сайт Игоря Сысоева автора nginx )
+ посмотри еще в нете


Название: Re: Стек или потоки?!
Отправлено: BRE от Октября 18, 2009, 20:31
А почему бы не использовать Boost::Asio? Она внутри использует нативные средства (kqueue|/dev/poll|epoll|whatever). Имеет удобный API для асинхронного чтения/записи. И масштабируется без особых проблем при помощи пула потоков.
+ еще бы посоветовал посмотреть на библиотеку ACE.


Название: Re: Стек или потоки?!
Отправлено: Xeon от Октября 18, 2009, 20:32
Rcus, а можно поподробней или ссылочку где почитать? :)


Название: Re: Стек или потоки?!
Отправлено: BRE от Октября 18, 2009, 20:44
boost::asio http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio.html
ACE http://www.cs.wustl.edu/~schmidt/ACE.html


Название: Re: Стек или потоки?!
Отправлено: niXman от Октября 21, 2009, 17:16
BRE, а под Windows чтонить посоветуешь? :)
А под виндавз пишут сервера? :D