У меня небольшой сокет-сервер, и мне нужно распространять различные сообщения от клиента к клиенту в зависимости от различных условий.
Однако я думаю, что у меня есть небольшая проблема с живостью в моем текущем коде, и есть ли что-то не так в моем подходе:
public class CuClient extends Thread
{
Socket socket = null;
ObjectOutputStream out;
ObjectInputStream in;
CuGroup group;
public CuClient(Socket s, CuGroup g)
{
this.socket = s;
this.group = g;
out = new ObjectOutputStream(this.socket.getOutputStream());
out.flush();
in = new ObjectInputStream(this.socket.getInputStream());
}
@Override
public void run()
{
String cmd = "";
try {
while (!cmd.equals("client shutdown")) {
cmd = (String) in.readObject();
this.group.broadcastToGroup(this, cmd);
}
out.close();
in.close();
socket.close();
} catch (Exception e) {
System.out.println(this.getName());
e.printStackTrace();
}
}
public void sendToClient(String msg)
{
try {
this.out.writeObject(msg);
this.out.flush();
} catch (IOException ex) {
}
}
И моя CuGroup:
public class CuGroup
{
private Vector<CuClient> clients = new Vector<CuClient>();
public void addClient(CuClient c)
{
this.clients.add(c);
}
void broadcastToGroup(CuClient clientName, String cmd)
{
Iterator it = this.clients.iterator();
while (it.hasNext()) {
CuClient cu = (CuClient)it.next();
cu.sendToClient(cmd);
}
}
}
И мой основной класс:
public class SmallServer
{
public static final Vector<CuClient> clients = new Vector<CuClient>(10);
public static boolean serverRunning = true;
private ServerSocket serverSocket;
private CuGroup group = new CuGroup();
public void body()
{
try
{
this.serverSocket = new ServerSocket(1337, 20);
System.out.println("Waiting for clients\n");
do
{
Socket s = this.serverSocket.accept();
CuClient t = new CuClient(s,group);
System.out.println("SERVER: " + s.getInetAddress() + " is connected!\n");
t.start();
} while (this.serverRunning);
} catch (IOException ex)
{
ex.printStackTrace();
}
}
public static void main(String[] args)
{
System.out.println("Server");
SmallServer server = new SmallServer();
server.body();
}
}
Рассмотрим пример со многими другими группами, возможно, с коллекцией групп. Если они все синхронизируются на одном объекте, я не думаю, что мой сервер будет работать очень быстро.
У меня есть шаблон или что-то, что может помочь моей жизненности?