Solac单线程C应用
Solac Single thread C Application
刚开始使用 C APISolac。但我发现如果我使用 solac,应用程序将是多线程的。
我有一个 C 应用程序,它是单线程并有多个连接(例如,TCP、UDP、FILE、timerfd)我正在使用 epoll 进行轮询。它们相互依赖。我想使用 Solac 作为 epoll 上的另一个连接。我想将我的应用程序保持为单线程,因为它具有依赖性。如果可以在单线程中使用 Solac 连接,请有人帮助我。
此致,
赛义德莫明
有一个单独的上下文线程用于 FD 处理和 Solace C 内部的所有东西 API 是默认行为。
这可以通过多种方式更改,但请务必阅读 https://docs.solace.com/Solace-PubSub-Messaging-APIs/Developer-Guide/C-API-Best-Practices.htm
中的 "Selecting a Threading Model" 和 "File Descriptor Management"
假设您想要 运行 epoll_wait()
自己并管理 API 的 FD,以下是所需内容的指南。这假定一个上下文。
禁用上下文线程的自动创建。
contextProps[ctxtIndex++] = SOLCLIENT_CONTEXT_PROP_CREATE_THREAD;
contextProps[ctxtIndex++] = SOLCLIENT_PROP_DISABLE_VAL;
在solClient_context_create()
中填写solClient_context_createFuncInfo_t
自己的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 事件回调。
在你的主 epoll 循环中:
epoll_wait()
超时 = SOLCLIENT_CONTEXT_PROP_DEFAULT_TIME_RES_MS
- 每隔
epoll_wait()
超时调用 solClient_context_timerTick()
- 回调 FD 事件
查找 Solace C API 参考以了解有关此答案中所述符号的更多详细信息:
https://docs.solace.com/API-Developer-Online-Ref-Documentation/c/index.html
刚开始使用 C APISolac。但我发现如果我使用 solac,应用程序将是多线程的。 我有一个 C 应用程序,它是单线程并有多个连接(例如,TCP、UDP、FILE、timerfd)我正在使用 epoll 进行轮询。它们相互依赖。我想使用 Solac 作为 epoll 上的另一个连接。我想将我的应用程序保持为单线程,因为它具有依赖性。如果可以在单线程中使用 Solac 连接,请有人帮助我。
此致, 赛义德莫明
有一个单独的上下文线程用于 FD 处理和 Solace C 内部的所有东西 API 是默认行为。
这可以通过多种方式更改,但请务必阅读 https://docs.solace.com/Solace-PubSub-Messaging-APIs/Developer-Guide/C-API-Best-Practices.htm
中的 "Selecting a Threading Model" 和 "File Descriptor Management"假设您想要 运行 epoll_wait()
自己并管理 API 的 FD,以下是所需内容的指南。这假定一个上下文。
禁用上下文线程的自动创建。
contextProps[ctxtIndex++] = SOLCLIENT_CONTEXT_PROP_CREATE_THREAD; contextProps[ctxtIndex++] = SOLCLIENT_PROP_DISABLE_VAL;
在
solClient_context_create()
中填写solClient_context_createFuncInfo_t
自己的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 事件回调。
在你的主 epoll 循环中:
epoll_wait()
超时 =SOLCLIENT_CONTEXT_PROP_DEFAULT_TIME_RES_MS
- 每隔
epoll_wait()
超时调用solClient_context_timerTick()
- 回调 FD 事件
查找 Solace C API 参考以了解有关此答案中所述符号的更多详细信息: https://docs.solace.com/API-Developer-Online-Ref-Documentation/c/index.html