I am looking to create a distributed framework in Java and need some help sorting out the implementation of a client/manager/worker situation as described in my pseudocode below.
Manager
BEGIN
WHILE(true)
RECEIVE message FROM client
IF (worker_connections > 0) THEN
FOR (i=0;i<worker_connections;i++)
SEND message TO worker[i]
FOR (i=0;i<worker_connections;i++)
RECIEVE result[i] FROM worker[i]
SEND merge(result[]) TO client
ELSE
SEND "No workers available" TO client
END IF
END WHILE
END
Client
BEGIN
RECEIVE message FROM user
SEND message TO manager
RECEIVE message FROM manager
END
Worker
BEGIN
WHILE(true)
RECEIVE message FROM manager
result = doSomething(message)
SEND result TO manager
END WHILE
END
So far I have implemented the client as described in the pseudocode but i'm having problems with the manager/worker part so at the moment the client just receives the message that no workers are available. The manager can accept multiple connections, each connection is run as a thread but how do I differentiate between a client connection and worker connection? How do I keep track of the number of workers currently connected?
The client, manager and workers are representations of different machines however I am only developing on one machine (in Java).