[ASIO] Do coroutines allow serving multiple clients at once?
I'm using ASIO with coroutines2 to create a ssl echo server. The code I've been experimenting is the following: http://nopaste.linux-dev.org/?1120051 While this is highly readable compared to the asynchronous callbacks version (thanks coroutines), I'd like to know if this code is able to serve multiple clients connecting at the same time to the server. In theory, every time I return control to the io_service object (i.e. I yield in the spawn coroutine) it should take care of whatever connection is pending / buffered / scheduled to be accepted next, right? Is this a reliable way to handle multiple requests? I don't plan on supporting massive workloads (e.g. 500k connections at once) but having some resilience would be nice indeed. Any other thoughts/tips are also warmly welcome.
2016-10-10 9:44 GMT+02:00 mmarkd9@libero.it
I'd like to know if this code is able to serve multiple clients connecting at the same time to the server.
I would say no. You spawn only one coroutine that calls in the for-loop async. operations of accept(), read() and write() in a sequence. No other client is able to connect to your server, e.g. connect() on the client side returns, until you enter accept() again. In order to serve multiple clients at the same time you need to spawn a coroutine that accepts new connections and for each client request (read()/write() operations) you need to spawn a new coroutine.
participants (2)
-
mmarkd9@libero.it
-
Oliver Kowalke