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.


The general concept you're referring to is distributed computing. More specifically, you seem to be doing some sort of volunteer computing. I'd suggest researching volunteer computing (on the magic googlebox) and looking into an existing project like BOINC.

  • that was helpful also i just found about the concept grid computing, its just funny to work with all those concepts without knowing that they even existed, but generally speaking Distributed computing concept is what i was missing out, now i can find more resources, thanks a lot. Jan 24 '14 at 2:42

Not the answer you're looking for? Browse other questions tagged or ask your own question.