2015-11-25 2 views
4

Я реализовал клиент websocket на C++, используя libwebsocket.
Я бы хотел отправить большие сообщения, но я ограничил полезную нагрузку сообщения до 8K, и мне нужно использовать это значение полезной нагрузки.
Вот это пропущено мой код инициализации:libwebsocket: отправлять большие сообщения с ограниченной полезной нагрузкой

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.
Есть ли способ bufferize данные или я должен использовать 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://tools.ietf.org/html/rfc6455#section-5.4

Смежные вопросы