Взгляните на проект с открытым исходным кодом «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.