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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket/QTcpServer узнать время коннекта в миллисекундах  (Прочитано 4412 раз)
merke
Гость
« : Октябрь 29, 2010, 15:47 »

Доброго времени суток!

У меня стоит задача узнать время коннекта клиента к серверу в миллисекундах. Может есть стандартное решение этой задачи? Или просто засечь время нажатия на кнопку "Соединиться" на клиенте и при соединении на стороне сервера также в лог вывести время соединения и путем простой арифметики высчитать время соединения?

Рационально  ли данное решение?

И ещё хочу спросить! Пишется клиент-серверное приложение. Есть две реализации:

1. Клиент коннектится к серверу и висит на нем(получает отправляет команды/файлы) до физического дисконекта т.е. отключился сервер либо нажата кнопочка на клиенте "Отключиться". Соединений может быть порядком 20 не больше.

2. Вторая реализация заключается в том что когда клиенту нужно что то передать на сервер он коннектится к нему передает нужную информацию и отключается. Также сервер, у него хранится реестр всех клиентов их IP адреса и порты, когда ему нужно что либо передать на клиент/клиенты он коннектится к клиенту передает данные и отключается. Т.е. на сервере стоит серверный сокет и на клиенте стоит серверный сокет. Получается нет постоянно висящих соединений.

Теперь вопрос: Какая из этих реализаций рациональна в плане нагрузки на сервер? Или когда имеются постоянно соединенные клиенты к серверу, или коннект инициируется только тогда когда нужно передать данные? когда передача завершится происходит дисконнект. Инициатором соединения в этом случае может быть как клиенты так и сервер.

Сервер будет стоять на Ubuntu.

Жду предложений!

С уважением, Александр
« Последнее редактирование: Октябрь 29, 2010, 16:10 от Александр » Записан
RedDog
Гость
« Ответ #1 : Октябрь 29, 2010, 15:59 »

Ловить QAbstractSocket::stateChanged
при QAbstractSocket::ConnectingState - запускать таймер
при QAbstractSocket::ConnectedState - останавливать
Записан
merke
Гость
« Ответ #2 : Октябрь 29, 2010, 16:49 »

Запускать таймер - это я так понимаю брать текущее время например
Код:
QTime::currentTime().msec();
Останавливать брать значения текущего же времени!

И потом высчитывать разницу?

Или взводить таймер с интервалом в 1 миллисекунду и инкрементировать какую то переменную на одну единицу в миллисекунду?
« Последнее редактирование: Октябрь 29, 2010, 16:58 от Александр » Записан
RedDog
Гость
« Ответ #3 : Октябрь 29, 2010, 22:55 »

Под виндой есть
Код:
DWOR GetTickCount()
под остальными ОС затрудняюсь ответить.
Есть еще QTimer::start/stop
Записан
aarlan
Гость
« Ответ #4 : Ноябрь 02, 2010, 00:30 »

если правильно понял, то в центре системы сервер, у которого список возможных клиентов.
давай теперь прикинем: если каждый раз по необходимости создавать коннект, что-то передавать-принимать, то разница по сравнению с постоянными соединениями, только в том, что создаются объекты: сокеты, возможно твои классы. это мелочь, учитывая, что клиентов у тебя 20. при постоянном подключении по сути никакой нагрузки на сервер нет.
разницу, может, можно заметить при стресс-тестировании, что-нить вроде клиенты подключаются на время порядка миллисекунды, что-то делают, отключаются, процесс повторяется.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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