Skip to content

connection.send_binary() out of memory #340

@michl2310

Description

@michl2310

Hello,

I encountered a problem when sending binary data through websockets using connection.send_binary().

Example:
datasize is >1MB
connection is slow (using vpn)

while(true) {
connection.send_binary(data);
sleep(100);
}

My guess is that the sending data1 has not completed yet and the new send triggers.
Data2 is being added to a sendbuffer which contains the old data1 and now new data2.
Data1 has been send in the meantime. Send triggers again. Even newer data3 is being added to the buffer.
Now the buffer contains data1, data2 and data3.
In my test the memory has been released only after all sends were completed.
If I used this loop, the sending queue never ends leading to a increasing memory consumption causing out of memory.

Has anyone encountered a similar problem?
What can I do in order to avoid out of memory errors when having slow connections?

Activity

The-EDev

The-EDev commented on Feb 10, 2022

@The-EDev
Member

I'm not sure if this can be solved in the framework itself (and how it go about it), but since you're using websockets, you can wait for the client to acknowledge receiving the data before sending any new data its way.

changed the title [-]connection.send_binary() out of memory[/-] [+]`connection.send_binary()` out of memory[/+] on Feb 10, 2022
dranikpg

dranikpg commented on Feb 23, 2022

@dranikpg
Member

The connection should provide backpressure and block in this case, until the buffers become less than some acceptable threshold. This should however be somewhat tricky with ASIO

linked a pull request that will close this issue on Feb 24, 2022
linked a pull request that will close this issueadded `send_binary_blocking` function #355on Apr 7, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @michl2310@dranikpg@The-EDev

      Issue actions

        `connection.send_binary()` out of memory · Issue #340 · CrowCpp/Crow