刚刚开始使用C APISolac。但是我发现如果我使用solac,应用程序将是多线程的。我有C应用程序,它是单线程,有多个连接(例如,TCP,UDP,文件,timerfd)我正在使用epoll轮询。互相依赖的人。我想使用Solac作为epoll上的另一个连接。我希望将我的应用程序保持为单线程,因为它有依赖关系。如果可以在单线程中使用Solac连接,请有人帮助我。
你好,赛义德·莫明
发布于 2018-09-05 02:49:26
拥有一个单独的上下文线程,用于FD处理和Solace内部的所有内容都是默认行为。
这可以通过各种方式进行更改,但请务必阅读https://docs.solace.com/Solace-PubSub-Messaging-APIs/Developer-Guide/C-API-Best-Practices.htm中的“选择线程模型”和“文件描述符管理”
假设您希望自己运行epoll_wait()
并管理API的FDs,下面是所需内容的指导方针。这假设只有一个上下文。
solClient_context_createFuncInfo_t
中的solClient_context_create()
:- `solClient_context_registerFdFunc_t` and
- `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将通过这些定义的函数注册自己的FD事件回调。
- `epoll_wait()` with timeout = `SOLCLIENT_CONTEXT_PROP_DEFAULT_TIME_RES_MS`
- call `solClient_context_timerTick()` every `epoll_wait()` timeout
- make callbacks to FD events
查找Solace参考,以获得关于此答案中所述符号的更多详细信息:https://docs.solace.com/API-Developer-Online-Ref-Documentation/c/index.html
https://stackoverflow.com/questions/52147003
复制相似问题