libwebsocket:发送有效负载有限的大消息

Posted

技术标签:

【中文标题】libwebsocket:发送有效负载有限的大消息【英文标题】:libwebsocket: send big messages with limited payload 【发布时间】:2015-11-25 12:26:48 【问题描述】:

我使用 libwebsocket 在 C++ 中实现了一个 websocket 客户端。 我想发送大消息,但我将消息负载限制为 8K,我需要使用该负载值。 这是我的初始化代码的片段:

void
WSManager::initProtocols(void)

    memset(protocols, 0, sizeof(protocols));
    protocols[0].name = "default";
    protocols[0].callback = callback;
    protocols[0].per_session_data_size = 1500;
    protocols[0].rx_buffer_size = 8000;

    /* End of the list */
    protocols[1].name = NULL;
    protocols[1].callback = NULL;
    protocols[1].per_session_data_size = 0;
    protocols[1].rx_buffer_size = 0;

现在的问题是如何发送大于 8K 的消息。 有没有办法缓冲数据或者我必须使用fraggle

【问题讨论】:

【参考方案1】:

我找到了解决问题的方法。该问题与用于每个碎片帧的标志和操作码有关。 看看这个(libwebsocket)写函数:

int n = libwebsocket_write(wsi, &write_buffer[LWS_SEND_BUFFER_PRE_PADDING], write_len,(libwebsocket_write_protocol)write_mode);

write_mode应设置如下:

int write_mode;
write_mode = LWS_WRITE_BINARY; // single frame, no fragmentation
write_mode = LWS_WRITE_BINARY | LWS_WRITE_NO_FIN; // first fragment
write_mode = LWS_WRITE_CONTINUATION | LWS_WRITE_NO_FIN; // all middle fragments
write_mode = LWS_WRITE_CONTINUATION; // last fragment

如果您需要更多详细信息,请阅读 WebSocket RFC 的碎片部分: https://www.rfc-editor.org/rfc/rfc6455#section-5.4

【讨论】:

非常感谢!这应该是 libwebsockets 文档的一部分!

以上是关于libwebsocket:发送有效负载有限的大消息的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 gmail api 发送电子邮件接收“原始”RFC822 有效负载消息字符串

如何在服务器端清理 mqtt 消息有效负载?

如何通过 libwebsocket 发送异步数据?

我可以向 Bluemix IBM Push Notifications 服务发送的 aps 有效负载添加元素吗?

使用通知中心将有效负载发送到特定客户端

Mule ESB:无法使用流有效负载复制消息