Russian Qt Forum

Qt => Работа с сетью => Тема начата: merke от Октябрь 29, 2010, 15:47



Название: QTcpSocket/QTcpServer узнать время коннекта в миллисекундах
Отправлено: merke от Октябрь 29, 2010, 15:47
Доброго времени суток!

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

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

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

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

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

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

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

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

С уважением, Александр


Название: Re: QTcpSocket/QTcpServer узнать время коннекта в миллисекундах
Отправлено: RedDog от Октябрь 29, 2010, 15:59
Ловить QAbstractSocket::stateChanged
при QAbstractSocket::ConnectingState - запускать таймер
при QAbstractSocket::ConnectedState - останавливать


Название: Re: QTcpSocket/QTcpServer узнать время коннекта в миллисекундах
Отправлено: merke от Октябрь 29, 2010, 16:49
Запускать таймер - это я так понимаю брать текущее время например
Код:
QTime::currentTime().msec();
Останавливать брать значения текущего же времени!

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

Или взводить таймер с интервалом в 1 миллисекунду и инкрементировать какую то переменную на одну единицу в миллисекунду?


Название: Re: QTcpSocket/QTcpServer узнать время коннекта в миллисекундах
Отправлено: RedDog от Октябрь 29, 2010, 22:55
Под виндой есть
Код:
DWOR GetTickCount()
под остальными ОС затрудняюсь ответить.
Есть еще QTimer::start/stop


Название: Re: QTcpSocket/QTcpServer узнать время коннекта в миллисекундах
Отправлено: aarlan от Ноябрь 02, 2010, 00:30
если правильно понял, то в центре системы сервер, у которого список возможных клиентов.
давай теперь прикинем: если каждый раз по необходимости создавать коннект, что-то передавать-принимать, то разница по сравнению с постоянными соединениями, только в том, что создаются объекты: сокеты, возможно твои классы. это мелочь, учитывая, что клиентов у тебя 20. при постоянном подключении по сути никакой нагрузки на сервер нет.
разницу, может, можно заметить при стресс-тестировании, что-нить вроде клиенты подключаются на время порядка миллисекунды, что-то делают, отключаются, процесс повторяется.