Solac Single Thread C Применение - PullRequest
       7

Solac Single Thread C Применение

0 голосов
/ 03 сентября 2018

Только сейчас начал использовать C APISolac. Но я обнаружил, что приложение будет многопоточным, если я использую Solac. У меня есть приложение C, которое является однопоточным и имеет несколько соединений (например, TCP, UDP, FILE, timerfd). Я опрашиваю с помощью epoll. которые зависят друг от друга. Я хотел использовать Solac как еще одну связь на epoll. Я хочу сохранить свое приложение как единый поток, потому что оно имеет зависимости. Пожалуйста, кто-нибудь, помогите мне, если возможно использовать соединение Solac в одном потоке.

С уважением, Сайед Момин

1 Ответ

0 голосов
/ 05 сентября 2018

Наличие отдельного потока контекста для обработки FD и всего, что связано с API Solace C, является поведением по умолчанию.

Это может быть изменено различными способами, но прочтите "Выбор модели потоков" и "Управление дескриптором файла" в https://docs.solace.com/Solace-PubSub-Messaging-APIs/Developer-Guide/C-API-Best-Practices.htm

Предполагая, что вы хотите запустить epoll_wait() самостоятельно и управлять FD API, ниже приведено руководство по тому, что необходимо. Это предполагает один контекст.

  1. Отключить автоматическое создание потока контекста.

    contextProps[ctxtIndex++] = SOLCLIENT_CONTEXT_PROP_CREATE_THREAD; 
    contextProps[ctxtIndex++] = SOLCLIENT_PROP_DISABLE_VAL;
    
  2. Заполните solClient_context_createFuncInfo_t в solClient_context_create() вашими собственными функциями управления FD:

    • solClient_context_registerFdFunc_t и
    • solClient_context_unregisterFdFunc_t.

    Первый предназначен для EPOLL_CTL_ADD/MOD и регистрации функции обратного вызова, второй для EPOLL_CTL_DEL/MOD. Примечание:

    • SOLCLIENT_FD_EVENT_ALL ~ EPOLLIN | EPOLLOUT
    • SOLCLIENT_FD_EVENT_READ ~ EPOLLIN
    • SOLCLIENT_FD_EVENT_WRITE ~ EPOLLOUT

    Solace C API зарегистрирует свои собственные обратные вызовы событий FD через эти определенные функции.

  3. В вашем главном цикле epoll:

    • epoll_wait() с таймаутом = SOLCLIENT_CONTEXT_PROP_DEFAULT_TIME_RES_MS
    • вызов solClient_context_timerTick() каждый epoll_wait() тайм-аут
    • делать обратные вызовы для событий FD

Посмотрите справку по Solace C API для получения более подробной информации о символах, указанных в этом ответе: https://docs.solace.com/API-Developer-Online-Ref-Documentation/c/index.html

...