Как обрабатывать несколько соединений Abyss Server в XMLRPC - C ++ - PullRequest
1 голос
/ 11 июля 2011

Сценарий следующий: У меня есть приложение XMLRPC-C ++, прослушивающее соединения по PORT = 8081. Он реализует Abyss Server, используя библиотеку xmlrpc-c следующим образом:

xmlrpc_c::serverAbyss myAbyssServer(
        myRegistry, //handler of methods
        port,       //8081        
        "xmlrpc_log"   
        );

когда я создаю несколько соединений из скрипта, вызывающего много методов XMLRPC, все работает нормально. скрипт выглядит примерно так: script1: rpc.method1 (параметры); rpc.method2 (параметры); rpc.methodN (параметры);

Если я проверяю соединения на сервере с помощью netstat и xmlrpc_log при выполнении этого скрипта, вывод будет выглядеть примерно так: XMLRPC-SERVER: 8081 XMLRPC-CLIENT: SOME TIME_WAIT. Хотя IP-адрес XMLRPC_CLIENT такой же, перед вызовом rpc.method он создает новые соединения.

Проблема возникает, когда я выполняю два из этих сценариев в одном и том же клиенте. Это означает, что вызов rpc.methodM (параметры) в одном скрипте выполняется одновременно с rpc.methodN (параметры) в другом скрипте того же клиента. Это приводит к сбою на сервере, и XMLRPC-SERVER остается выключенным до перезапуска процесса.

Я прочитал справку Abyss, и метод runOnce () не поможет. По умолчанию, вызывая конструктор, как указано выше, MaxConnections по умолчанию равен 30, а время ожидания составляет 15 сегментов для сервера Abyss.

Есть ли какие-либо настройки, чтобы избежать этого сбоя? Мне нужно будет поддерживать более одного клиента одновременно и много соединений одновременно.

Спасибо за любую помощь, связанную с этим,

С уважением, Luchux.

1 Ответ

0 голосов
/ 15 июля 2011

Хорошо. по-видимому, сервер обрабатывает несколько соединений и поддерживает многопоточность с помощью pthreads. Проблема должна быть в моем коде, выполняемом вызовами RPC, я полагаю, из-за проблемы безопасности с повторным входом / потоком.

  • После некоторого перерыва в работе с другим проектом я вернулся к этому коду, и проблема была в библиотеке естественного языка с некоторыми не входящими в него методами. Они решили это, я решил это :) -
...