2013-03-14 7 views
0

Я работаю над клиент-серверным приложением (используя qt для tcp). Клиенты должны отправлять около 15 сообщений в секунду на сервер. Проблема заключается в следующем:
сообщения от клиентов получены группами. Я имею в виду: , когда я получаю сигнал readyRead(), и я читаю данные из сокета, в буфере есть несколько сообщений.
Этот курс вызывает отставание в системе.Qt TCP/чтение нескольких клиентов

Я попытался поместить входящие соединения в отдельные потоки (нить на соединение), но улучшения не было.
Я также попытался подняться нить, каждый раз, когда я получил readyRead() сигнал, но опять ничего ...

НО когда я бегу ряд клиентов на том же компьютере, что и сервер, кажется, все в порядке. При использовании разных ПК по сети происходит задержка ... (в сети используется сеть со скоростью 100 Мбит/с, сообщения < 200 КБ, а ping между ПК - < 5 мсек, поэтому я не считаю, что это проблема сети).

на стороне клиента, код для записи данных довольно прост:

tcpSocket->write(message.toUtf8()); 
tcpSocket->waitForBytesWritten(); 
tcpSocket->flush(); 

Я также попробовал без flush() или waitForBytesWritten(), но то же самое ...

EDIT: Использование Qt 4.8.4 и Windows 7 и XP

У кого-нибудь есть идея, как это преодолеть?
Спасибо заранее!

ответ

0

В прошлый раз, когда я столкнулся с аналогичной проблемой, было связано с сообщением stdin/stdout QProcess of Qt3.3. В Linux и Windows он совершенно другой.

В заключение мы выяснили, (большая задержка, доступно несколько сообщений). Обходной путь, который мы пытались сделать, заключался в сокращении периода таймера в источнике Qt, но в конце мы переключились на разделяемую память на основе собственных механизмов ОС.

Ваше описание звучит так, как будто вы используете аналогичную версию Qt для ОС Windows.

+0

Я использую qt 4.8.4 с окнами 7/XP. Можете ли вы предоставить дополнительную информацию об этом решении? Благодаря! – GSta

Смежные вопросы