Russian Qt Forum

Qt => Общие вопросы => Тема начата: kedi от Октябрь 23, 2012, 12:22



Название: Клиент-сервер
Отправлено: kedi от Октябрь 23, 2012, 12:22
Добрый день, прошу сильно не пинать, с програмированием QT(да и вообще) на вы.

Задача написать клиент серверное приложение, сеть ненадёжна.
*сетевая логика сводится к тому что клиент регистрируется на сервере и затем слушает сервер на события адресованные ему, так же у клиента есть возможность "отрегистрироваться".
*сервер регистрирует клиентов и при необходимости отсылает им разные "события".
*сервер может сам (по своей инициативе) отсоединить(отрегистрировать) клиента.
*клиентов будет до 1000.

почитал я про сокеты, серверы (тсп), потоки.

вопросы собственно как это грамотнее и эфективнее реализовать? как на сервере организовать работу сокетов для соединения с клиентами.
-стоит ли при регистрации каждого клиента создавать отдельный поток с сокетом соединения? и держать это соединение открытым всё время пока клиент зарегистрирован?
-если не использовать потоки на сервере. тупо в контейнере держать список зарегистрированых клиентов, и при необходимости отправки события устанавливать соединение и закрывать его после отправки. При обвалах сети как клиенту знать зарегистрирован он на сервере или нет и наоборот? не накладно ли получится пинговать сервер каждому клиенту скажем каждые 30 сек.

если сморозил ****, поправтье.
какие есть книги или материалы по реализации клиент-серверных архитектур, решений?


Название: Re: Клиент-сервер
Отправлено: Bepec от Октябрь 23, 2012, 12:37
Если бы ты читал ты бы знал, что:
1) поток на 1 клиента - бред.
2) остальное возможно.
3) пинговать сервер не затратно для каждого клиента.

PS клиент-серверная архитектура и есть архитектура :)


Название: Re: Клиент-сервер
Отправлено: kedi от Октябрь 23, 2012, 13:40
То есть лучше держать контейнер из сокетов клиетов?
иметь постоянную связь с каждым клиентом или устанавливать при необходимости?



Название: Re: Клиент-сервер
Отправлено: Bepec от Октябрь 23, 2012, 13:56
1-2 потока на приём, 1-2 потока на посыл. А насчёт постоянно или прерывать уже сам решай.


Название: Re: Клиент-сервер
Отправлено: Impuls от Октябрь 24, 2012, 10:40
Сейчас пишу точно такую же программу. Мне нужно отслеживать подключения с одним логином на нескольких ПК в сети с доменом.
Решил сделать примерно так:
Каждый пользователь раз в N-секунд шлет широковещательную UDP датаграмму со своим логином и tcp портом для подключения сервера. Сервер принимает эти данные, обрабатывает как ему вздумается и шлет команды на TCP сокет клиенту (благо все данные для подключения уже известны). Когда обмен данными с клиентом будет закончен - сервер рвет TCP соединение и продолжает работать дальше в штатном режиме.

Вот как-то так.