I'm curious how far others have pushed Boost.Asio in terms of scalability. I am writing an application that may use close to 1000 socket objects, a handful of acceptor objects, and many thousand timer objects. I've configured it such that there's a thread pool invoking io_service::run
and use strand
s in the appropriate places to ensure my handlers do not stomp on each other.
My platform is Red Hat Enterprise Linux with Boost 1.39, though I'm not opposed to upgrading to a more recent version of boost.
I've used boost asio with a client / server where the server has several hundreds of concurrent connections all day long. Each session does a lot of read/write operations for several hours each. I would recommend using the latest version of boost asio. I can't remember version 1.39 but I've had issues with older versions. The current version of boost asio seems stable.
The software I'm talking about only runs on Windows I should mention as well though which differs from your situation.
We are using 1.39 on several Linux flavors for timers, network (both TCP and UDP), serial (20+ lines, two of which run at 500 kbps), and inotify events, and while we don't have many socket connections, we do have a few hundred async timers at any time. They are in production and they work well, for us. If I were you, I'd make up a quick prototype and performance-test it.
Boost 1.43 claims a number of Linux-specific performance improvements in ASIO, but I am yet to benchmark them for our product.