在我的用例中,我的消息很小,但是有很多,并且它们来的非常快。有时我的应用程序必须响应。但是,我希望它仅在处理完收到的所有消息后作出响应。
我通过以下方式接收消息:
static int lws_event_callback(struct lws* conn, enum lws_callback_reasons reason, void* user, void* data, size_t len)
{
switch(reason)
{
case LWS_CALLBACK_CLIENT_RECEIVE:
{
my_callback_client_receive(data);
}}}
我对libwebsockets的内部了解不多,但是从概念上讲,我可以想象到有可能在调用my_callback_client_receive
时,其他消息已经到达。
在理想情况下,会有一个变量n
,它表示“可以在缓冲区中等待处理的消息数”,我可以将该变量传递给回调函数
case LWS_CALLBACK_CLIENT_RECEIVE:
{
my_callback_client_receive(data, n);
}
这样,在我处理尽可能多的消息之前,我将不响应。像这样:
void my_callback_client_receive(data, n)
{
process(data);
if (n>1):
return; // this msg is not the most recent, keep processing
else:
send_response();
return;
}
LWS可以做到这一点吗?