실행 가능한 새 스레드를 만들고 서버가 모든 클라이언트를 알아야하므로 서버를 알고 있는지 확인하십시오. 클라이언트가 메시지를 보내면 데이터 프로세서 스레드를 통해 메시지를 구문 분석하고 처리합니다. 작업 처리가 완료되면 서버에 알려서 모든 클라이언트를 업데이트 할 수있게하십시오.
팁 : 처리 스레드의 대기열을 LinkedBlockingQueue과 같이 만들어야 작업이 완료 될 때까지 기다리지 않고 항상 작업을 대기열에 넣을 수 있습니다. 그런 다음 테드는 처리해야 할 큐에서 기다릴 것입니다. 큐 여기
에 실제로 작업이있을 때 처리 스레드는 CPU 리소스를 사용하는이 방법은 코드 예제
public abstract class Queue implements Runnable {
private final LinkedBlockingQueue<Message> queue;
public Queue() {
this.queue = new LinkedBlockingQueue<Message>();
}
/**
* Adds a message to the queue.
* @param message
*/
public void add(final Message message) {
try {
queue.put(message);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}
/**
* Waits for new messages
*/
@Override
public void run() {
while(true) {
try {
final Message message = queue.take();
processMessage(message);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}
}
/**
* Processes the new message
*/
protected abstract void processMessage(Message message);
}
당신이 별도의 스레드에서 각 연결을 처리하려는 경우입니다 NIO를 추가하여 혼동 할 필요가 없습니다. java.net 클래스 만 사용하면됩니다. – EJP
내 서버가 +50 클라이언트를 허용 할 수 있습니다. 스레드/클라이언트를 1 개 만들지 않습니다. 필요한 경우 데이터를 전송하기 위해 모든 클라이언트 채널을 메모리에 유지하면됩니다. – kinaesthesia