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.

closed as off-topic by gnat, GlenH7, user40980, Bart van Ingen Schenau, DougM Jan 25 '14 at 17:28

This question appears to be off-topic. The users who voted to close gave this specific reason:

  • "Questions asking us to recommend a tool, library or favorite off-site resource are off-topic for Programmers as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it." – gnat, GlenH7, Community
If this question can be reworded to fit the rules in the help center, please edit the question.


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. – user1590636 Jan 24 '14 at 2:42

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