1

我用 libwebsockets 库创建了一个 websocket 服务器,协议列表是这样的:

/* List of supported protocols and callbacks. */
static struct libwebsocket_protocols protocols[] = {
    { "plain-websocket-protocol" /* Custom name. */,
      callback_websocket,
      sizeof(struct websocket_client_real),
      0 },
    { NULL, NULL, 0, 0 } /* Terminator. */

};

当我使用“html + javascript + chromium 浏览器”作为客户端发送大于 4096 字节的 websocket 消息时,websocket 服务器将多次收到 LWS_CALLBACK_RECEIVE 回调,一条消息拆分为两条或更多,最大接收大小为 4096 .

如何在服务器端接收无限大小的 websocket 消息?

4

2 回答 2

0

这个答案将解决这个问题:

如何在服务器端接收无限大小的 websocket 消息?

其实比较简单。而且你不需要改变你rx_buffer_size以前建议的样子。

查看size_t lws_remaining_packet_payload(struct lws *wsi)此处记录的函数:https ://libwebsockets.org/libwebsockets-api-doc.html

您可以在 LWS_CALLBACK_RECEIVE 回调处理程序中使用此函数来确定为您的回调提供的数据是否完成了完整的 WebSocket“数据包”(又名消息)。如果这个函数返回非零,那么在未来的回调中会有更多的数据到达这个数据包。因此,您的应用程序应该缓冲这些数据,直到lws_remaining_packet_payload(wsi)返回 0。此时,您已经阅读了完整的消息并且可以适当地处理完整的消​​息。

于 2021-09-30T15:04:23.787 回答
0

lws_protocols结构现在有一个rx_buffer_size成员,因此您应该能够使用它来配置 4096 大小。有关详细信息,请参阅 api 文档https://libwebsockets.org/libwebsockets-api-doc.html

于 2016-04-11T13:41:46.990 回答