1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/bytes33-BMsgQueue

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

BMsgQueue = lockMq + boost::bind

Первый этап:

  1. Реализация высококонкурентной обработки большого количества SQL-операций (подключение к различным серверам данных, обработка некоторых транзакций БД).
  2. Изучение использования некоторых библиотек BOOST.
  3. Попытка использования в одном из приложений компании. (….)

Завершение:

  1. Реализована блокируемая очередь сообщений.
  2. Использование очереди обмена + N очередей обработки для реализации потребления и обработки. Примечание: недавно видел реализацию, где использование двухуровневой очереди сообщений позволяет обрабатывать сообщения совместно без потери некоторых сообщений из-за голодания. Стоит попробовать.
  3. Методы, такие как операции с БД, связаны с помощью boost::bind с callback, образуя узел выполнения, реализуя асинхронную операцию с БД.

Day day up

Второй этап:

  1. Добавление брокера между производителем и потребителем для реализации схемы Producer ==> Broker ==> Consumer. Это обеспечивает логическое разделение: производитель должен знать только о существовании брокера и отправлять сообщения брокеру, не заботясь о поведении потребителя; потребитель также должен знать только о брокере и обрабатывать сообщения из определённой очереди MQ на брокере, не беспокоясь о действиях производителя.
  2. Независимый модуль БД для удобства расширения и использования других баз данных в будущем. (В настоящее время этот модуль подходит только для Windows и подключения к MySQL).
  3. Оптимизация производителей и потребителей. (Чувствуется, что логика не ясна. Возможно, потребуется рефакторинг….).
  4. Оптимизация асинхронного сокета boost::asio. Чувствуется, что проблемы с обработкой кадров и пакетов решаются плохо.
  5. Добавление модульных тестов в каждый независимый модуль.
  6. Перенос среды разработки на Linux.

Завершение:

  1. Добавлен асинхронный сокет, обрабатываемый с использованием сопрограмм.
  2. Изменена структура каталогов:

    --bin --obj --src ----net ----log ----test --win

Обновление:

  • Узел выполнения DB.
  • Простой пул DBPool.
  • Блокируемая очередь MSG.
  • Чтение конфигурационного файла.
  • Разделение BMsgQueue на два класса: поток BMsgThread и рабочая очередь BMsgQueue.
  • Использование boost:bind для реализации полиморфизма.
  • Добавление тестирования.
  • Поддержка компиляции в среде VS2010.
  • Добавление миллисекундного таймера событий BEventTimer.
  • Превращение DBPool в одноэлементный режим.
  • Ошибка таймера timer.
  • Замена списка на boost::circular_buffer.
  • Некоторые интересные открытые проекты для заметок.
  • Реализация асинхронного сокета с boost::asio.

//commit b7b3c89acad940efc307bd4de20741f82834a1f1 //Подходит для этой версии

Тестовый код:

// int main() {
zone.Init(); boost::thread_group group;

//Открываем поток обмена
group.create_thread(BMsgThread(SWAP_TYPE));
//Выполняем обработку потока
group.create_thread(BMsgThread(RUN_TYPE));
group.create_thread(BMsgThread(RUN_TYPE));
group.create_thread(BMsgThread(RUN_TYPE));
group.create_thread(&test);

//
boost::asio::io_service ios; 

//Таймер
// Добавляем рабочий объект  
boost::asio::io_service::work work(ios);  

boost::function<void()> func = boost::bind(&BDbWorkZone::TestEvent, zone);
BEventTimer::GetTimerInstance()->SetEventListener(ios, func, -1, 1000);

//
ios.run();
group.join_all();

return 0;

}

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
LGPL-2.1
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/bytes33-BMsgQueue.git
git@api.gitlife.ru:oschina-mirror/bytes33-BMsgQueue.git
oschina-mirror
bytes33-BMsgQueue
bytes33-BMsgQueue
master