Q:

Designing java client

I'm currently developing a client/server application in Java and i can't make up my mind on how to design the client. 
At the moment i have a server that can accept multiple connections and every connection has a loop listening for commands and respond to them. The server looks like this:
    try{

        mIn = new DataInputStream(mSocket.getInputStream());
        mOut = new DataOutputStream(mSocket.getOutputStream());

        while(true){

            byte tPackType = mIn.readByte();

            switch(tPackType){

                case PackType.LOGIN:
                    login();
                    break;
                case PackType.REGISTER:
                    register();
                    break;
                default:

            }

        }

    }catch (IOException e){
        mLog.logp(Level.WARNING, this.getClass().getName(), "run()", "IOException in run()", e);
    }finally{
        try{
            mOut.close();
            mIn.close();
            mSocket.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }

Now, the client is basically just a number of methods sending a request to the server and returns the response. I want to be able to receive updates from the server. 
I would appreciate any suggestions on reading that can help me find a solution.
Is there any patterns i could look into?
Thank you in advance, veLr.

A:

I want to be able to receive updates from the server
I think that you have two options to do this.

Option 1 is to make your client poll the server for updates. I would not recommend this since this will eventually increase your load on your server. You will most likely have performance issue the moment you attempt to scale your system up.
Option 2 is to create a small server on your client. So basically, whenever there is an update, the server would connect to the client and send it the updates. I would recommend this procedure since it allows you to establish connections between your server and clients only when needed. The problem, when opposed to the previous method, is that you will need to track of the ports and IP's of your clients. You could implement a HashTable with Client ID's as keys and their connection properties as their keys. Once you have an update, you will look up the client in the HashTable, obtain the connection information, connect and send the information.

The server on the client side will then get the data and do whatever you want the client to do once an update is received.

