Название: Клиент-сервер Отправлено: 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 соединение и продолжает работать дальше в штатном режиме. Вот как-то так. |