2014-04-25 59 views
1

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

libwebsockets似乎是一个很好的C++库。唯一的问题是,它似乎主要是在回调系统上设计的,所以显然只有当客户端要求时才会发送数据。

我发现这个职位有类似的问题,但我不知道这是否是做到这一点的最好办法:How do I send async data via libwebsocket?

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

回答

1

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

所以,通常情况下,我用我的第二个协议(非HTTP一个),每当我有一些数据,我的代码任何部分libwebsocket_callback_on_writable_all_protocol(protocols + 1),并在协议的回调函数广播

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; 
    ... 
    } 
}