Russian Qt Forum
Ноябрь 25, 2024, 16:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Клиент-сервер  (Прочитано 2862 раз)
kedi
Гость
« : Октябрь 23, 2012, 12:22 »

Добрый день, прошу сильно не пинать, с програмированием QT(да и вообще) на вы.

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

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

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

если сморозил ****, поправтье.
какие есть книги или материалы по реализации клиент-серверных архитектур, решений?
Записан
Bepec
Гость
« Ответ #1 : Октябрь 23, 2012, 12:37 »

Если бы ты читал ты бы знал, что:
1) поток на 1 клиента - бред.
2) остальное возможно.
3) пинговать сервер не затратно для каждого клиента.

PS клиент-серверная архитектура и есть архитектура Улыбающийся
Записан
kedi
Гость
« Ответ #2 : Октябрь 23, 2012, 13:40 »

То есть лучше держать контейнер из сокетов клиетов?
иметь постоянную связь с каждым клиентом или устанавливать при необходимости?

Записан
Bepec
Гость
« Ответ #3 : Октябрь 23, 2012, 13:56 »

1-2 потока на приём, 1-2 потока на посыл. А насчёт постоянно или прерывать уже сам решай.
Записан
Impuls
Гость
« Ответ #4 : Октябрь 24, 2012, 10:40 »

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

Вот как-то так.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.044 секунд. Запросов: 20.