2015-05-04 386 views
2

我使用libwebsocket客戶端發送二進制數據。我已將我的二進制數據保存到緩衝區[即buf]並寫入套接字。libwebsocket發送有效負載限制

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

我的問題是插座能夠只寫22392個字節[正如我已經收到N = 22392]。當我> = 22392字節時,它被視爲部分寫入。該值因各種體系結構而異。

問:

  • 是否有libwebsocket數據大小的任何限制?

  • 任何方式來擴展緩衝區有效載荷值?

+0

感謝@戴維·施瓦茨。我是libwebsocket的新手。我也想知道什麼阻止寫入比22392字節更多的字節。 – Han

+0

如果您將套接字設置爲非阻塞,那麼當套接字嘗試發送更多數據時,會發生部分寫入。如果您將套接字設置爲非阻塞,然後嘗試寫入,顯然您必須*處理部分寫入。 –

回答

5

我得到了我的問題的答案。這是阻止我的數據的有效負載值。根據數據大小調整有效負載值。

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

0

要麼不使用這個庫,要麼使用阻塞套接字。這個庫沒有提供完成非阻塞I/O的方法。要在部分寫入時執行理想的非阻塞I/O,您需要知道發送了多少個字節以及剩餘多少個字節,以便您可以在套接字可再次寫入時嘗試寫入其餘字節。但這個圖書館只提供一個號碼。沒有辦法告訴兩件事。

(你不能僅僅從你想送,因爲編碼的數據比未編碼的數據大的字節數中減去。)

+0

這使得我的程序延遲,因爲我需要發送塊大小有限的數據塊。任何擴大有效載荷大小的可能性? – Han

+0

它確實與載荷大小几乎沒有任何關係。即使使用一個字節的有效載荷,也可能會遇到此問題。使用libwebsocket和非阻塞套接字是一個問題。如果你沒有看到它有更小的有效載荷,你只是幸運。使用阻塞套接字或使用更好的websocket庫。 –

+0

那麼,你推薦哪個庫,然後呢? – br1