2

我有 libwebsocket 客户端来发送二进制数据。我已将二进制数据保存到缓冲区 [即 buf] 并写入套接字。

n = libwebsocket_write(wsi,
       &buf[LWS_SEND_BUFFER_PRE_PADDING], l, opts | LWS_WRITE_BINARY);

我的问题是套接字只能写入 22392 字节 [正如我收到的 n = 22392]。当我的 l >=22392 字节时,它被视为部分写入。该值因各种架构而异。

问题:

  • libwebsocket 中的数据大小是否有任何限制?

  • 有什么方法可以扩展缓冲区有效负载值?

4

2 回答 2

6

我得到了我的问题的答案。那是阻止我的数据的有效负载值。根据数据大小调整有效载荷值。

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

于 2015-05-05T06:30:58.660 回答
0

要么不使用这个库,要么使用阻塞套接字。这个库没有提供执行非阻塞 I/O 的合理方法。要进行合理的非阻塞 I/O,在部分写入时,您需要知道发送了多少字节以及剩余多少字节要发送,以便在套接字再次可写时尝试写入其余字节。但是这个库只为您提供一个数字。没有办法告诉这两件事。

(您不能只减去要发送的字节数,因为编码数据大于未编码数据。)

于 2015-05-04T10:51:34.277 回答