I’m rewriting an app that is currently written in nodejs but having scaling issues, and I know boost::asio is the proper answer. I’m just unclear which is the best pattern to use.
- Full duplex server, 100k concurrent users, long sessions (e.g. classic C10k problem)
- Server receives lots of small packets, acknowledges the packets, and occasionally broadcasts to all connected
- Server also forwards messages on to a completely different service, so will also be a client to 1 socket (this socket is full-duplex and can be shared process-wide)
http://www.boost.org/doc/libs/1_45_0/doc/html/boost_asio/examples.html
You’ll see two examples. I think one of these holds the answer. But which one (or am I way off)?
- HTTP Server 2 – An HTTP server using an io_service-per-CPU design.
- HTTP Server 3 – An HTTP server using a single io_service and a thread pool calling io_service::run().
Keep in mind: My problem is not HTTP, which is generally implemented as half-duplex and connections are often killed after requests get fulfilled.
So which overall design is better for my problem? (p.s. I’m also not sure how to simulate this to run proper benchmarks.)