libwebsockets是否提供发布/订阅?

时间:2014-04-25 11:54:35

标签: c++ websocket publish-subscribe libwebsockets

我想创建一个Web应用程序,其中一组用户可以在C ++后端有新内容时异步接收某些数据。因此,理想情况下,当新用户出现时,他会被添加到订阅者列表中,每当C ++后端拥有该组的新数据时,它就会将其发布给每个人。

libwebsockets似乎是一个与C ++一起使用的好库。唯一的问题是,它似乎主要是在回调系统上设计的,因此,显然数据只有在客户要求时才会发送。

我发现此帖有类似问题,但我不知道这是否是最好的方法:How do I send async data via libwebsocket?

任何帮助将不胜感激。 谢谢。

1 个答案:

答案 0 :(得分:1)

发现它了! libwebsockets允许您使用libwebsocket_callback_on_writable_all_protocol(*protocol)向所有连接的用户广播到特定协议,触发LWS_CALLBACK_SERVER_WRITEABLE将由协议的回调函数处理,这是我们可以发送数据的地方。

所以,通常情况下,每当我在我的代码的任何部分使用libwebsocket_callback_on_writable_all_protocol(protocols + 1)和协议的回调函数

进行广播时,我都会使用我的第二个协议(非http协议)
static int callback_linux_shell(struct libwebsocket_context * context, struct libwebsocket *wsi, enum libwebsocket_callback_reasons reason, void *user, void *in, size_t len) {
    switch (reason) {
    ...
        case LWS_CALLBACK_SERVER_WRITEABLE:
            libwebsocket_write(wsi, my_data, my_data_size, LWS_WRITE_TEXT);
            break;
    ...
    }
}