Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проектирование, хочу спроектировать красиво :) 
:(
    Опции темы
chaos
Дата 18.8.2009, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Предисловие: есть сервер. надо написать к ниму клиента. клиент посылает запрос и получает ответ. запросов порядка 50шт + есть одна "команда" которую сервер может посылать клиенту спонтанно.

вот думаю как сделать все как можно компактнее, расширяемо и тп.

пока только в голову пришло следующее:

Код

class Client
{
public:
    void connectToHost(const QString& addr, quint16 port);
    void disconnectFromHost();

    ResponseN sendRequest(const RequestN& request)
    {
        socket->write(request);
        if (event.wait_data(timeout)) {
            return responseN;
        }
        else {
            throw ....
        }
    }

public signals:
    void incomingMessage(Response51& response);

private:
    QTcpSocket *socket;
};



Описал проблему конечно не очень smile но думаю в процессе обсуждения добавятся какие-нибудь детали.
в целов если, то вот так.



Заранее благодарен!
PM WWW   Вверх
GoldFinch
Дата 18.8.2009, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



1) выделить сетевой уровень в отдельный класс(ы)
2) выделить сборку\парсинг (сериализацию) пакетов в отдельный класс
3) организовать общение как RPC, отправка пакета - вызов метода сервера, прием пакета - вызов метода клиента

Добавлено через 1 минуту и 24 секунды
QT лучше asio?
PM MAIL ICQ   Вверх
chaos
Дата 18.8.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Цитата(GoldFinch @  18.8.2009,  07:13 Найти цитируемый пост)
QT лучше asio? 

лучше хуже не знаю smile тут дело в другом - аппликуха должна работать на Windows Mobile & Simbian S60


по предложению касательно архитектуры - интересненько. Сижу обмазговываю
PM WWW   Вверх
andrew_121
Дата 18.8.2009, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(GoldFinch @  18.8.2009,  10:13 Найти цитируемый пост)
QT лучше asio? 

Удобней. Интуитивно понятней.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
jonie
Дата 18.8.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



AMPQ или, например XMPP используйте (протоколы) и не парьте мозги себе 8)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
chaos
Дата 18.8.2009, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



jonie, мозг придется попарить тк сервер уже давнго написан и существуют клиенты. просто нужно написать под новую платформу
PM WWW   Вверх
Lazin
Дата 18.8.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Цитата(andrew_121 @  18.8.2009,  11:43 Найти цитируемый пост)
Удобней

для gui программистов - возможно

Цитата(andrew_121 @  18.8.2009,  11:43 Найти цитируемый пост)
Интуитивно понятней

для них-же

вряд-ли на основе QtTCPServer получится написать высоконагруженный сервер, со всеми этими сигналами и слотами
я уже молчу о том, что помимо TCP, существует UDP, ICMP
помимо этого, asio, это не просто сетевая библиотека, а framework, для асинхронных приложений, на ее основе можно сделать все что угодно, от таймеров, до асинхронного мониторинга изменений в каталоге
PM MAIL Skype GTalk   Вверх
chaos
Дата 18.8.2009, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



Lazin, привет smile
я переодически почитываю Ваш блог smile и так же как и Вы люблю boost::asio, так же не только ввиду его кросовой работы с TCP и тп, а в ввиду возможностей. это раз smile
два! boost не попадает под внимание тк платформы WinMobile(тесты буста не утишительны) & Symbian s60(вообще не видел тчо бы кто-то пытался smile ). Тк в QT все в одном флаконе принято решение ограничится только им.

что касается сервера - сервер реализован на яве и на qt никто ничего не планирует переписывать. Речь идет только о добавлении новых платфрм для клиентов. Касательно возможностей qt для клиента - да заглаза тк трафик минимальный, нагрузка тоже не большая. Вообщем QT это то что нужно для написания под мои требования.


ЗЫ давай те по делу smile



Это сообщение отредактировал(а) chaos - 18.8.2009, 12:43
PM WWW   Вверх
jonie
Дата 18.8.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата

jonie, мозг придется попарить тк сервер уже давнго написан и существуют клиенты. просто нужно написать под новую платформу 
ну и что с того - напишите мост 8)

а по вашей реализации - вам нужен Pimpl, т.к. реализация сокетов на разных платформах разная. http://insidecpp.ru/patterns/pimpl_idiom/


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
chaos
Дата 18.8.2009, 12:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 6
Всего: 44



jonie, 
Цитата(jonie @  18.8.2009,  09:43 Найти цитируемый пост)
а по вашей реализации - вам нужен Pimpl

по моей реализации мне хватит QT
PM WWW   Вверх
jonie
Дата 18.8.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118



Цитата(chaos @ 18.8.2009,  12:44)
jonie, 
Цитата(jonie @  18.8.2009,  09:43 Найти цитируемый пост)
а по вашей реализации - вам нужен Pimpl

по моей реализации мне хватит QT

тогда нафига вы тут задаете вопросы по архитектуре? Где у вас архитектура?)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
andrew_121
Дата 18.8.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Цитата(Lazin @  18.8.2009,  12:01 Найти цитируемый пост)
для gui программистов - возможно

Увы. Это не обо мне.

Цитата(Lazin @  18.8.2009,  12:01 Найти цитируемый пост)
вряд-ли на основе QtTCPServer получится написать высоконагруженный сервер

Думаю получится.

Цитата(Lazin @  18.8.2009,  12:01 Найти цитируемый пост)
со всеми этими сигналами и слотами

В Qt они очень быстрые. Проверенно:
http://forum.vingrad.ru/index.php?showtopi...t&p=1909927


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Lazin
Дата 18.8.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



[offtopic]
Цитата(andrew_121 @  18.8.2009,  13:27 Найти цитируемый пост)
В Qt они очень быстрые. Проверенно:

да ну smile
в любом случае, обычные функторы, которые используются в asio, будут работать во много раз быстрее, так как там не выполняется поиск слота, хотя это и не важно, а важно то, что
Цитата(Lazin @  18.8.2009,  12:01 Найти цитируемый пост)
помимо этого, asio, это не просто сетевая библиотека, а framework, для асинхронных приложений, на ее основе можно сделать все что угодно, от таймеров, до асинхронного мониторинга изменений в каталоге

QTCPServer - простой класс, для того, что-бы быстро набыдлокодить серверную часть, например, что-бы сделать web-морду для какого-нибудь приложения. В asio вообще нет класса, в названии которого было-бы слово server. Но там есть средства для того, что-бы создать любое сетевое приложение, с любой архитектурой. К примеру, используя boost.signals2 и boost.asio можно написать свой аналог QTcpServer, можно написать однопоточный сервер, многопоточный - thread per client или асинхронный сервер, все что душе угодно.
[/offtopic]
PM MAIL Skype GTalk   Вверх
andrew_121
Дата 18.8.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



 smile 
Цитата(Lazin @  18.8.2009,  14:20 Найти цитируемый пост)
QTCPServer - простой класс, для того, что-бы быстро набыдлокодить серверную часть, например, что-бы сделать web-морду для какого-нибудь приложения.

Слишком резко сказано.

В Qt есть множество классов более низкого уровня. Ими так же можно пользоваться.
http://doc.trolltech.com/4.5/qtnetwork.html

Цитата(Lazin @  18.8.2009,  14:20 Найти цитируемый пост)
Но там есть средства для того, что-бы создать любое сетевое приложение, с любой архитектурой. К примеру, используя boost.signals2 и boost.asio можно написать свой аналог QTcpServer, можно написать однопоточный сервер, многопоточный - thread per client или асинхронный сервер, все что душе угодно.

Согласен.

Опять же, все зависит от цели. Если целью ТС является как вы сказали "набыдлокодить", зна придется использовать QTCPServer. И на оборот.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
nerezus
Дата 18.8.2009, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Lazin, повторное использование и универсализация теперь называются быдлокодингом? Или использование ООП-библиотек с оверхедом?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.