c-Ho来合并来自不同项目的事件循环



我正在使用用于XMPP消息传递的Strophe C库和libwebstock来创建Websocket服务器。我想做的是将在strophe上收到的消息转发到Websocket客户端,反之亦然。但是我不知道该怎么做。

此外,strophe和libwebstock都需要运行事件循环来处理事件。如何运行两个循环或将它们合并为一个循环,以便在同一程序中处理来自两个库的事件?

提前感谢。:)

首先需要创建2个线程。让thread1分别是libstrophe的事件循环,thread2分别是libwebstock的事件环路。总体思路可以用下一个伪代码来描述:

xmpp_message_callback() {
    libwebsock_send_text();
}
thread1() {
    xmpp_run();
}
libwebsock_message_callback() {
    xmpp_send();
}
thread2() {
    libwebsock_wait();
}
main() {
    init_libstrophe()
    init_libwebsock();
    create_thread1();
    create_thread2();
    join_thread1();
    join_thread2();
}

但是(!)由于libstrohe不是线程安全的,所以不能直接从thread2调用xmpp_send()。相反,我建议使用互斥锁来保护队列。因此,上面的例子转换为:

list  queue;
mutex queue_lock;
xmpp_message_callback() {
    libwebsock_send_text();
}
thread1() {
    while {
        xmpp_run_once();
        mutex_lock(queue_lock);
        while (queue is not empty) {
            stanza = list_pop_front(queue);
            xmpp_send(stanza);
        }
        mutex_unlock(queue_lock);
    }
}
libwebsock_message_callback() {
    mutex_lock(queue_lock);
    list_push(queue, stanza);
    mutex_unlock(queue_lock);
}
thread2() {
    libwebsock_wait();
}

相关内容

  • 没有找到相关文章

最新更新