Просмотр сообщений
|
Страниц: 1 [2] 3 4 ... 39
|
16
|
Qt / Базы данных / Re: База и таблицы сообщений сервера и клиентов
|
: Апрель 26, 2023, 09:06
|
... Но через клиента может подключится не один юзер а несколько ...
Одновременно или по очереди? Если по очереди, то при процедуре logout локальная база должна быть почищена. А при процедуре login локальная база должна быть синхронизирована с сервером и/или другими клиентами и/или бекапом. Синхронизацию можно делать не полную, а только N последних сообщений, а остальное подгружать по мере необходимости. ... имеется сервер с базой и таблицей сообщений, в одной таблицу сообщения всех пользователей и всех чатов(если считаете что это не правильно то приму совет как лучше).
Если цель реализовать чат, то следует выбрать подходящую схему - централизованную или распределенную. Всё зависит от конечной цели. В централизованной (когда одна общая таблица) необходимо иметь БД со всеми сообщениями всех пользователей, которая будет со временем только расти. Обслуживание такого сервера - большие затраты ресурсов (вычислительных и материальных). БД - единая точка отказ, слабое звено. Чем больше пользователей и их сообщений, тем медленнее работает централизованная БД. Такая схема годится для небольших чатов и для учебных проектов. В распределенной схеме серверная БД занимается только регистрацией пользователей и диспетчеризацией их соединений, а все сообщения хранятся на стороне пользователя. Пользователь при желании может настроить их бэкапирование на свой облачный ресурс. Здесь не требуется большой БД для хранения сообщений, нагрузка на сервер минимальна. Количество пользователей может быть очень большим.
|
|
|
18
|
Qt / Вопросы новичков / Re: Ошибка с декларированием собственного класса
|
: Октябрь 14, 2022, 09:08
|
C++ (Qt) namespace MyNamespace { class MyClass : public AbstractMyClass { }; //!!! } Q_DECLARE_METATYPE(MyNamespace::MyClass)
1) Нет точки с запятой 2) Класс похоже абстрактный This macro makes the type Type known to QMetaType as long as it provides a public default constructor, a public copy constructor and a public destructor.
|
|
|
21
|
Qt / Установка, сборка, отладка, тестирование / Re: Бинарник и Библиотеки QT в разные папки
|
: Июнь 20, 2022, 07:44
|
Как разделить бинарник и библиотеки QT в разные папки? Если нет возможности задать всё в системных путях, то лучше скрипт запуска написать, в котором всё определить. Для Windows что-то типа того set MINGW_DIR=%CD%\3rdparty\mingw-7.3.0 set QT_DIR=%CD%\3rdparty\qt-5.12.6 set PATH=%MINGW_DIR%\bin;%QT_DIR%\bin;%QT_DIR%\plugins;%PATH% cd "рабочая директория" start "" "запускаемый бинарник" "параметры запуска" exit 0
|
|
|
24
|
Программирование / С/C++ / Re: Слияние диапазонов
|
: Январь 28, 2022, 10:55
|
Поиграйте с таким примером C++ (Qt) #include <algorithm> using Interval = ::std::pair< int, int >; using Intervals = ::std::vector< Interval >; // условие упорядочивания по значению начала диапазона struct IntLowerCompare { bool operator () ( const Interval & left, const Interval & right ) { return left.second + 1 < right.first; } }; // условие упорядочивания по значению конца диапазона struct IntUpperCompare { bool operator () ( const Interval & left, const Interval & right ) { return left.first + 1 < right.second; } }; // условие необходимости слияния struct IntMergeCondition { bool operator () ( const Interval & left, const Interval & right ) { return left.second + 1 >= right.first; } }; template < typename Intervals, typename Interval, typename LowerCompare, typename UpperCompare, typename MergeCondition > void add ( Intervals & intervals, const Interval & interval, LowerCompare lower_compare, UpperCompare upper_compare, MergeCondition merge_condition ) { // итератор для первого значения в коллекции с возможно пересекающимся интервалом auto lower_iter = ::std::lower_bound( ::std::begin( intervals ), ::std::end( intervals ), interval, lower_compare ); if ( lower_iter != ::std::end( intervals ) ) { // если есть пересечение if ( merge_condition( interval, *lower_iter ) ) { // итератор для последнего значения в коллекции с возможно пересекающимся интервалом auto upper_iter = ::std::upper_bound( ::std::begin( intervals ), ::std::end( intervals ), interval, upper_compare ); auto first_iter = lower_iter; auto last_iter = upper_iter == ::std::end( intervals ) ? lower_iter : upper_iter; // изменение пересекающегося lower_iter->first = ::std::min( first_iter->first, interval.first ); lower_iter->second= ::std::max( last_iter->second, interval.second ); // удаление лишних intervals.erase( ++first_iter, ++last_iter ); } else { // вставка в середину intervals.insert( lower_iter, interval ); } } else { // вставка в конец intervals.insert( lower_iter, interval ); } } int main ( int, char ** ) { Intervals intervals = {{1, 2}, {8, 9 }}; add( intervals, Interval{ -2, -1 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} ); add( intervals, Interval{ 5, 5 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} ); add( intervals, Interval{ 5, 7 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} ); add( intervals, Interval{ 3, 7 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} ); add( intervals, Interval{ 0, 10 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} ); add( intervals, Interval{ 11, 11 }, IntLowerCompare{}, IntUpperCompare{}, IntMergeCondition{} ); }
|
|
|
27
|
Компиляторы и платформы / Mac OS X / Re: Xcode Guard Malloc
|
: Октябрь 01, 2021, 23:11
|
Так вопрос остался открытым. Указатель source указывает на достаточное количество байт, чтобы хранить весь этот текст и нулевой символ в конце? И занулен ли последний символ принудительно?
|
|
|
Страниц: 1 [2] 3 4 ... 39
|
|
|