NoneGlib основной цикл pthread слишком занят?
Многопоточное программное обеспечение C-сервера, работающее таким образом:
1 поток - это API отдыха (связанный с libmicrohttpd)
1 поток устанавливает соединение STUN (используя libnice)
1 поток отвечает за ssl handhsake (openssl)
1 поток собирает данные (в кольцевом буфере)
1 поток распределяет эти данные (из кольцевого буфера)
клиент (javascript) работает в браузере (Firefox, Chrome или Safari) в Linux, Windows, MacOS или iOs.
Safari в iOS не выдает локальных кандидатов в лед, поэтому я активировал расширенную опцию кандидатов в mDNS, и она прекрасно работает.
проблема заключается в том, что как только мне перезвонят в cb_component_state_changed с состоянием "соединения", я начинаю получать данные в cb_nice_received, даже если соединение не установлено (в потоке соединения stun).
Я неоднократно получаю привет клиенту, а остальная нить API почему-то становится неактивной, потому что основной запрос работает интенсивно, и я не вижу кандидата на лед, отправляемого браузером, и поэтому не могу передать агенту его, следовательно, соединение stun не завершено. Я вижу это в wireshark, но обратный вызов libmicrohttpd не вызывается, поэтому я никогда не завершаю ледовое соединение
В основном мой вопрос состоит из двух частей:
Почему я получаю данные в cb_nice_received, хотя на этом этапе соединение не установлено.
Как мне поступить, возможно, замедляя основной глобал, чтобы остальная нить API могла вставлять слово на ребро...
программное обеспечение работает безупречно в Firefox и Chrome в Linux, Windows и Mac OS, в Safari в Mac OS, но проблемы проявляются в Safari iOS.
Спасибо за вашу помощь;-)
Я уже пытался поставить usleep в cb_nice_received, чтобы он уступил другим потокам, включая REST API, безрезультатно
ожидаемый результат - баланс между потоками, поэтому gloop не захватывает всю программу, препятствуя запуску других потоков