![]() |
|
Модераторы: feodorv |
![]()
|
|
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Всем доброго времени суток! Собственно изучаю данный сабж и пытаюсь написать сервер какой должен отвечать на запросы и всё такое. Сервер будет работать не(!) с клиентами написаными на asio , хотя что то мне подсказывает что разницы быть не должно. Но у меня появилась проблема... коннекты сервер принимает , а вот с обменом сообщений - туго. Для теста использовал ранее написаную утилиту которая просто отправляет и читает пакет в ответ. Суть в том что коннект происходит нормально, и моя утилита сразу же отправляет сообщение и ждет другое сообщение в ответ. Но сервер (на бусте) вообще не вызывает handle_read , а точнее вызывает только когда утилита по таймауту дисконектится . Вот и не понимаю что у меня не так...
Благодарю всех и каждого в помощи изучения этого не простого дела! |
|||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
На сколько я понимаю проблема в async_read_until. Подставлял просто "\r\n" но ничего не менялось. Не понимаю почему "оно" не видит конца пакета
|
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
а он(конец пакета) есть? если есть сложность с просмотром пакетов, то рекомендую почитать это: http://www.boost.org/doc/libs/1_46_0/doc/h.../overload4.html Добавлено через 2 минуты и 33 секунды нет ни малейшей надобности в нескольких io_service`ах. в вашем случае точно нет. |
|||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
да =). я уже в ручную дописывал, и использовал в качестве утилиты билдер (который сам , при использовании Инди, дописывает \r\n в конец)
Пока что конечно , пока я в этом не силен, лучше начинать с маленького. Но в конце ,у меня задача, должен быть быстрый и масштабируемый сервер который будет быстро обрабатывать клиентов. Имеется ввиду что... например создается 4 потока которые ждут пакет. Например , приходит 4 пакета от разных (!) клиентов. Вот тут я могу и ошибатся , но вот мое предположение: если 1 нить то пакеты будут обрабатыватся постепенно. То есть сначала первый потом второй а потом третий. Если же 4 нити то все пакеты будут обработаны за один приход. Я заблуждаюсь или нет? =) |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
в одном из своих проектов, я, при использовании одного io_service`а и пула потоков, достиг ~178000 запросов-ответов от 6800 юзеров онлайн, в секунду ;) это как пример того, что кол-во io_service`ов ни коим образом не влияет на производительность. я бы даже сказал наоборот. пошли два пакета подряд. ради теста. и еще, перейди по ссылке и почитай. такой способ очень удобен для отладки. Добавлено @ 10:52 в этом ты прав. но это не значит что кол-во io_service`ов или рабочих потоков должно равняться кол-ву одновременно пришедших пакетов. Это сообщение отредактировал(а) boostcoder - 27.2.2011, 10:53 |
|||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
впечатляет конечно =) , вот именно , примерно, такое мне и надо Пробовал, нивкакую =). Есть большое подозрение... дело в том что у меня например создается 4 нити в которых идет обработка сообщения. Так вот... что то мне подсказывает что там просто дезлок. То есть при коннекте считывание разрешается только одной нити. Вот мне и кажется что когда идет коннект то одна нить переходит в работу с клиентом, а другая хочет считывать дальше сообщения. Вот и получается дезлок. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
это: http://www.boost.org/doc/libs/1_46_0/doc/h...ent.threadgroup конечно, это не пул, а просто группа потоков. но для большинства задач подходит. не понял. |
|||
|
||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
хмм... почитал... но если я не ошибаюсь это просто обертка над потоками? И по сути там нету ни задания для потоков на установку в очередь пула для обработки некой ф-ции, ни автоматического расширения кол-ва потоков и автоматического анализа сколько надо создать тредов. По сути это всё на плечи программиста . И выходит что если без танцов с бубном то 1 клиент = 1 нить, верно? Или я чего то не допонимаю? |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
http://www.boost.org/doc/libs/1_46_0/doc/h...p.create_thread
да, этого нет. угу. но вы торопите события. об этом можно думать тогда, когда проект написан и работает.
не верно. читайте: http://forum.vingrad.ru/index.php?showtopi...t&p=2306244 |
||||
|
|||||
| Kirgston |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
спасибо =) с пулами будем разбиратся Начал делать по Вашему совету... но в ходе процесса появилось множество вопросов(увы но мануал еще больше завел в тупик) 1) почему не работает данный код:
Писал по примеру из http://www.boost.org/doc/libs/1_39_0/doc/h...line_timer.html . Вся разница в классе, не более. Ошибка на стадии компиляции: ">c:\users\алекс\documents\visual studio 2010\projects\asioserver2\asioserver2\main.cpp(93): error C3867: session::OnTimeOut: в вызове функции отсутствует список аргументов; используйте "&session::OnTimeOut" для создания указателя на член" По сути мне просто надо сделать таймер в котором буду проверять пришел ли ответ от клиента или же он "уснул" . И если уснул то надо закрыть связь. 2) как можно настроить max_connections? Ибо это увы, константа :( Или для решения вопроса о максимально допустимом числе одновременных коннектов надо писать свой счетчик? 3) как можно узнать тот же IP, TTL и все прочие прелести от входного коннекта? Т.к. , вроде, в tcp::socket ничего интересного не нашел. Благодарю ! |
||||
|
|||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
потому что не совпадают ожидаемая сигнатура, и предоставленная вами.
угу
откуда такая надобность? Оо |
||||||
|
|||||||
| Kirgston |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
||||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
с IP - понятно. так: asio::ip::tcp::socket::remote_endpoint().address().to_string() c TTL - для чего? boost::bind() |
|||
|
||||
| Kirgston |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 792 Регистрация: 24.12.2007 Репутация: нет Всего: 2 |
Спасибо большое! Жаль что (по крайней мере для меня) это не прямо напоминает то чем оно есть. Ремоут_ендпоинт расшифровывается как удаленная конечная точка, увы но я ожидал чего то более лаконичного Я не имел ввиду именно ТТЛа , это первое что пришло в голову. А так мне интересно было как узнать вообще весь хидер пакета. Чтобы максимально получить информацию о клиенте. Ага, вчера им тоже пытался =) он мне начал орать что я неправильно его использую. Может действительно криво, так что поковыряю. Кстати... я правильно "убиваю" клиента?
this - класс для сессии клиента |
||||
|
|||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 13 Всего: 110 |
||||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |