Асинхронный однопоточный сервер и обработка данных, как создать буффер данных для каждого подключившегося клиента |
Здравствуйте, гость ( Вход | Регистрация )
Асинхронный однопоточный сервер и обработка данных, как создать буффер данных для каждого подключившегося клиента |
demiurg |
3.5.2011, 23:21
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 27.4.2011 Пользователь №: 2639 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вообщем сабж. Есть однопоточный асинхронный сервер завязанный на БД и на который в теории может подключится одновременно около 100 клиентов. Но перед тем как добавлять в базу данных нужно реализовать несложный протокол обработки , а для этого нужно чтобы для каждого клиента был свой буффер данных ( данные могут идти с задерками) . Никак не вьеду как это реализовать покрасивее. Пытался создать класс типа
Но тогда нет согласования *cl_sock и buffer в строчке обработки слотов приёма данных и удаления сокета client->cl_sock = qobject_cast<QTcpSocket*>(sender()); Помогите кто сталкивался пожалуйста Я уже запутался Сервер взял типовой из примеров Земского. Хм, перечитал непонятно наверно пробему объяснил. Собственно данные идут в разрыв. Т.е. клиент может перестать передавать , а потом продолжить. Тогда в буффер объявленный в конструкторе сервера (глобальный) могут помимо уже записанных данных одного клиента попасть данные другого. Код могу привести но его много. То что я пытался сделать , но это видать не то Раскрывающийся текст
Раскрывающийся текст
|
|
|
xls |
4.5.2011, 12:51
Сообщение
#2
|
Студент Группа: Участник Сообщений: 44 Регистрация: 6.9.2010 Пользователь №: 2013 Спасибо сказали: 7 раз(а) Репутация: 2 |
Цитата Т.е. клиент может перестать передавать , а потом продолжить. Тогда в буффер объявленный в конструкторе сервера (глобальный) могут помимо уже записанных данных одного клиента попасть данные другого Может, идентифицировать клиента по IP-адресу и дописывать в буфер, созданный в конструкторе? Или их по несколько штук на хост может быть? |
|
|
demiurg |
4.5.2011, 13:06
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 27.4.2011 Пользователь №: 2639 Спасибо сказали: 0 раз(а) Репутация: 0 |
Теоретически возможно и сотня.
Решил проблему через QMap Как бы теперь протестировать ? |
|
|
PAFOS |
7.6.2011, 7:47
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
Вообще, на будущее, лучше через QMap такие вещи не делать ибо по-любому надо будет еще какой-нибудь параметр привязать к клиенту.
Делай класс, который описывает эти параметры + владеет указателем на объект QTcpSocket. И не забудь определить для этого класса операторы == и < для того, чтобы использовать его(класс) в контейнерах типа QList<> QVector<> и др. |
|
|
Текстовая версия | Сейчас: 15.1.2025, 18:47 |