About a year ago I had an idea in mind which was using my friends computers to help me process my data, so I programmed a socket server application with
boost::asio, and gave the client part of it to my friends.
When they connect they send the server (my machine) a message containing their computer specs (available cores, memory), based on that the server application decides how much data they can handle at a time and whenever they finish processing a batch they send a "ready for more messages" to my server, and the client applications keep sending data about the state of the process, and there is a lot of handling going in the background, whatever happens on the client machines its up to the server to take the right decision, if the connection with a client machine is lost and it has not been back in 5 minutes, the server keeps track of the data that has been sent to that machine and asks about it whenever that client reconnects.
I started this project and I only had some basic knowledge in network programming and I didn't read about any patterns that could be used and I just used my guts but I found it really useful, I would like to expand it but I want to know if there is a known pattern for doing the same thing using TCP sockets, if yes what's the name of that pattern?
I think of it as a super computer with its components spread around the world.
So I would appreciate some resources about this kind of thing.