Как стать автором
Обновить

Комментарии 18

А что на счет производительности? Были ли замечены тормоза? Например если 1000 клиентов, то задержка заметна глазом или нет?
У нас не было ресурсоемких задач, максимум 100 подключений, но тут главное не подключения, а передаваемые данные.
Недостатки этой либы:
1. Если передаются блоки по паре байт, то что бы обернуть эти байты, нужно добавить к передаваемым данным еще байт 40 на сигнатуру методов, типы аргументов и т.п.
2. При передаче больших объемов, все данные предварительно сохраняться в QByteArray, а это дополнительное время на сохранение и дополнительные расходы памяти.
Главный плюс этой библиотеки, это ее гармоничное встраивание в приложения, написанные на Qt.
40 байт не так серьезно при не очень частой пересылки. Но вот если например при чате в 1000 отправка одного мессаджа (и последующая рассылка его на 999) приведет к кратовременной загрузке проца на 100% это уже печальнее. Хотя думаю это маловероятно.
НЛО прилетело и опубликовало эту надпись здесь
У нас эта либа работает и под Linux и под Mac. Поведение под разные платформы не отличается.
а нет бинарников?
Если нужно, могу собрать под vs2010.
буду признателен
www.dropbox.com/s/fdpq73p6scq6flp/remint.zip?m
Все собрано под VS2010, солюшен и проекты оставил.
Я собрал в одну папку и либу и чат, поэтому что бы сгенерить проект под нужную студию нужно только запустить «qmake -tp vc -r» в корневой папке.
Все бинари лежат в «remint\QexRemint\bin\release».
Также я положил туда vcredist_x86.exe, для тех, у кого нет студии.
Окна чата напомнили мне чат, который я писал в студенчестве. Мы с другом были в одной локале, но инет у меня был чаще всего отрублен, а чат хотелось.
Я сварганил на c++ builderу простой чат, который мы назвали ZopaChat. Он позволял общаться только двум людям, при этом каждый инстанс мог выступить как клиентом так и сервером — в зависимости от порядка запуска.
Что-то не слишком мне нравится стиль в котором библиотека написана, а точнее сказать совсем не по нраву он мне. И потом на чистых кутях это очень легко все делается, не нужно городить огород со всеми этими обертками, причем еще и полуживыми.
Либа очень маленькая, в ней просто сериализация и вызовы. Как реализовать проще плохо себе представляю.
Поделитесь видением как это можно реализовать?
Обычно это делается так:

  1. На стороне сервера поднимают QTcpServer, который сервит сокеты
  2. На стороне клиента открывается QTcpSocket, который represents socket interface
  3. Клиент пишет что-то в сокет, например в формате [command] [arg1] [arg2]
  4. Сервер читает его и передает паттерну Strategy
  5. Стратегия все решает и Сервер отдает ответ


Все это работает на деле очень просто — только QtNetwork. Главное нигде не напутать с байтами и все будет окей :)
Все так и есть, фактически либа реализует Strategy, которая настраивается коннектами.
Также есть несколько дополнительных плюшек, благодаря Qt-шоной метосистеме и не нужно выдумывать свой протокол передачи.
Как и сказал Gorthauer87, выглядит кривовато. Что сказать насчет протокола передачи. Я обычно такой делаю через обертку. И для передачи можно делать что-то типа:

server->sendRequest("command", QStringList() << "arg1" << "arg2" << "arg3");

А на клиенте принимать:

void Client::handleRequestRecieved(const QString &command, const QStringList &argv)
{
    // ...
}

Если кто-нибуть попросит, может и сделаю либо для такого взаимодействия.
Можно еще в objc стиле передавать аргументы:
server->request(«method», ArgMap() << Argument(«arg1», value1));

обычно rest серверы в таком стиле их просят.
А совсем уж православно делать асинхронный вызов методов и после request'а возращать некий FutureWatcher, который как получит сигнал о том, что метод выполнен, вернет значение или возратит ошибку.
Конечно, можно. Так и делаем очень часто. Это же только пример, упрощенный.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории