Очередь сообщений, многопоточность c ++ - PullRequest
2 голосов
/ 08 июля 2010

Я искал реализацию межплатформенной многопоточной очереди сообщений на c ++ (не на слоте / сигнале). Лучше, если это основано на паттерне субъект-наблюдатель.

Ответы [ 4 ]

3 голосов
/ 08 июля 2010

ZeroMQ выглядит так, как будто это то, что вы ищете.

Это хорошо задокументировано с множеством примеров, таких как этот: http://www.zeromq.org/blog:multithreaded-server, который можетбудь тем, что ты пытаешься реализовать.

1 голос
/ 15 декабря 2011

Взгляните на проект с открытым исходным кодом «ISL» (расшифровывается как «Internet Server Library», C ++), в котором SVN-репозиторий расположен на http://svn.storozhilov.com/isl/ - класс isl :: AbstractMessageBroker - хороший кандидат для подвала вашей работы. Это довольно простой, но расширяемый каркас для любой подсистемы брокера сообщений (DBus, JMS, AMQP и т. Д.). Каждый клиент обслуживается двумя потоками из пула предварительно запущенных потоков: один предназначен для получения сообщения из сообщения транспортировки и обработки, а другой - для отправки сообщения в транспорт. Таким образом, для реализации вашей системы обмена сообщениями вы должны переопределить, по крайней мере, три виртуальных метода:

    isl::AbstractMessageBroker::receiveMessage(...);
    isl::AbstractMessageBroker::processMessage(...);
    isl::AbstractMessageBroker::sendMessage(...);

Пример использования находится в каталоге trunk / examples / EchoMessageBroker. Клиент отвечает эхом сообщением, разрывает соединение в сообщении "пока \ r \ n", завершает себя в SIGINT.

0 голосов
/ 08 июля 2010

Взгляните на библиотеку Intel с открытым исходным кодом lib Threading Building Blocks .Они кроссплатформенные, и в прошлый раз, когда я смотрел, у них были контейнеры без блокировки.

0 голосов
/ 08 июля 2010

Вы можете попробовать Apache ActiveMQ. http://activemq.apache.org. Довольно надежный. Мы используем его для платформы обмена сообщениями FIX, достаточно отзывчивый и простой в настройке.

...