我有libwebsocket客户端发送二进制数据。我将二进制数据保存到缓冲区中[即buf]并写入插座。
n = libwebsocket_write(wsi,
&buf[LWS_SEND_BUFFER_PRE_PADDING], l, opts | LWS_WRITE_BINARY);
我的问题是插座能够仅编写22392字节[我收到的n = 22392]。当我的l> = 22392字节时,会注意到部分写入。此值在各种体系结构中有所不同。
问题:
libwebsocket中是否存在数据大小的限制?
任何方法可以扩展缓冲有效载荷值?
我得到了我的问题的答案。那是阻止我数据的有效载荷值。根据数据大小调整有效载荷值。
struct libwebsocket_protocols {
const char * name;
callback_function * callback;
size_t per_session_data_size;
size_t rx_buffer_size;
unsigned int id;
struct libwebsocket_context * owning_server;
int protocol_index;
};
rx_buffer_size
您应该将其设置为您支持的最大法律框架的大小。
将rx_buffer_size设置为65536后,我能够完全编写数据。
此处的链接对我有帮助
https://libwebsockets.org/trac/libwebsockets/ticket/40
https://libwebsockets.org/libwebsockets-api-doc.html
既不使用此库或使用阻止插座。该库没有提供无障碍I/O的理智方式。要做明智的非阻滞I/O,在部分写作上,您需要知道发送了多少个字节,以及剩下多少个字节要发送,以便您可以在插座再次写作时尝试写其余的。但是该库只为您提供一个数字。没有办法说这两件事。
(您不能仅从要发送的字节数中减去,因为编码的数据大于未编码的数据。)