libwebsocket 发送负载限制
libwebsocket send payload limitation
我正在让 libwebsocket 客户端发送二进制数据。我已将我的二进制数据保存到缓冲区中 [即buf] 并写入套接字。
n = libwebsocket_write(wsi,
&buf[LWS_SEND_BUFFER_PRE_PADDING], l, opts | LWS_WRITE_BINARY);
我的问题是套接字只能写入 22392 字节 [正如我收到的 n= 22392]。当我的 l >=22392 字节时,它被认为是部分写入。此值因架构而异。
问题:
libwebsocket对数据大小有限制吗?
有什么方法可以扩展缓冲区负载值吗?
要么不使用这个库,要么使用阻塞套接字。这个库没有提供理智的方式来进行非阻塞I/O。要在部分写入时执行理智的非阻塞 I/O,您需要知道发送了多少字节以及剩余多少字节要发送,以便您可以在套接字再次可写时尝试写入其余部分。但是这个图书馆只为你提供一个号码。没有办法说出这两件事。
(您不能只减去要发送的字节数,因为编码数据比未编码数据大。)
我得到了问题的答案。那是阻止我的数据的有效负载值。根据数据大小调整payload值。
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
我正在让 libwebsocket 客户端发送二进制数据。我已将我的二进制数据保存到缓冲区中 [即buf] 并写入套接字。
n = libwebsocket_write(wsi,
&buf[LWS_SEND_BUFFER_PRE_PADDING], l, opts | LWS_WRITE_BINARY);
我的问题是套接字只能写入 22392 字节 [正如我收到的 n= 22392]。当我的 l >=22392 字节时,它被认为是部分写入。此值因架构而异。
问题:
libwebsocket对数据大小有限制吗?
有什么方法可以扩展缓冲区负载值吗?
要么不使用这个库,要么使用阻塞套接字。这个库没有提供理智的方式来进行非阻塞I/O。要在部分写入时执行理智的非阻塞 I/O,您需要知道发送了多少字节以及剩余多少字节要发送,以便您可以在套接字再次可写时尝试写入其余部分。但是这个图书馆只为你提供一个号码。没有办法说出这两件事。
(您不能只减去要发送的字节数,因为编码数据比未编码数据大。)
我得到了问题的答案。那是阻止我的数据的有效负载值。根据数据大小调整payload值。
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