多线程C服务器软件可以这样工作:
1个线程是rest API(链接到libmicrohttpd)
1个线程建立STUN连接(使用libnice)
1个线程负责ssl握手(openssl)
1个线程正在收集数据(在循环缓冲区中)
1个线程正在从循环缓冲区分发此数据
客户端(javascript)在Linux,Windows,MacOS或iO的浏览器(Firefox,Chrome或Safari)中运行。
iOS中的Safari不会放弃本地的ice候选对象,因此我已激活了mDNS候选对象的高级选项,并且效果很好。
问题是,一旦我以“连接”状态在cb_component_state_changed中被回调,即使未建立连接(在stun连接线程中),我也开始在cb_nice_received中接收数据。
我开始反复接收到客户端问候,并且其余的API线程以某种方式变得不活动,因为主gloop正在密集运行,并且我看不到浏览器发送的ice候选对象,因此无法向其提供代理,因此眩晕连接未完成。我可以在Wireshark中看到它,但是没有调用libmicrohttpd回调,所以我从不完成我的ice连接
基本上我的问题有两个:
即使目前没有建立连接,我如何接收cb_nice_received中的数据。
我该如何减慢主gloop的速度,以便其余API线程可以稍微说一遍...
该软件可以在Linux,Windows和Mac OS上的Firefox和Chrome,Mac OS上的Safari上完美运行,但问题会在Safari iOS中显示。
谢谢您的帮助;-)
我已经尝试过在cb_nice_received中置入一个休眠状态,以便它可以让其他线程(包括REST API)一无所获
预期结果是线程之间的平衡,因此gloop不会通过阻止其他线程运行来接管整个程序