我想创建一个 Web 应用程序,只要C++后端有新的东西,一组用户就可以异步接收一些数据。因此,理想情况下,当新用户到来时,他将被添加到订阅者列表中,并且每当C++后端有该组的新数据时,它都会将其发布给所有人。
libwebsockets似乎是一个很好的库,可以与C++一起使用。唯一的问题是,它似乎主要设计在回调系统上,因此,显然数据仅在客户端要求时才发送。
我发现这篇文章有类似的问题,但我不知道这是否是最好的方法:如何通过 libwebsocket 发送异步数据?
任何帮助将不胜感激。谢谢。
找到了!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;
...
}
}