From b211bdbe384c2e6d39bd0a45668a2a4dcc11673d Mon Sep 17 00:00:00 2001 From: Benjamin Sergeant Date: Thu, 21 Feb 2019 14:08:27 -0800 Subject: [PATCH] Update README.md Add note about message fragmentation. --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index b671e052..e5b7b738 100644 --- a/README.md +++ b/README.md @@ -134,9 +134,12 @@ No manual polling to fetch data is required. Data is sent and received instantly If the remote end (server) breaks the connection, the code will try to perpetually reconnect, by using an exponential backoff strategy, capped at one retry every 10 seconds. +### Large messages + +Large frames are broken up into smaller chunks or messages to avoid filling up the os tcp buffers, which is permitted thanks to WebSocket [fragmentation](https://tools.ietf.org/html/rfc6455#section-5.4). Messages up to 500M were sent and received succesfully. + ## Limitations -* Sending large messages are not supported yet (see feature/send_large_message). This is a bug and will be fixed. * There is no text support for sending data, only the binary protocol is supported. Sending json or text over the binary protocol works well. * Automatic reconnection works at the TCP socket level, and will detect remote end disconnects. However, if the device/computer network become unreachable (by turning off wifi), it is quite hard to reliably and timely detect it at the socket level using `recv` and `send` error codes. [Here](https://stackoverflow.com/questions/14782143/linux-socket-how-to-detect-disconnected-network-in-a-client-program) is a good discussion on the subject. This behavior is consistent with other runtimes such as node.js. One way to detect a disconnected device with low level C code is to do a name resolution with DNS but this can be expensive. Mobile devices have good and reliable API to do that. * The server code is using select to detect incoming data, and creates one OS thread per connection. This isn't as scalable as strategies using epoll or kqueue.