ServerSocket과 Socket은 블로킹 방식으로, I/O 작업이 완료될 때까지 현재 스레드를 멈춥니다.ServerSocketChannel과 SocketChannel은 논블로킹 모드를 지원하여 I/O 작업이 즉시 반환되며, Selector와 함께 사용하여 많은 클라이언트를 단일 스레드로 관리할 수 있습니다.주로 java.io라이브러리의 Socket 과 ServerSocket 객체를 사용하여 구현하며,
serverSocket.accept()로 client의 신호를 받은 뒤,
new Thread(new ClientHandler(clientSocket)).start() 스레드를 생성하여, 서버와 클라이언트의 소켓을 연결시키는 방식이다.
주로 java.nio.channels 라이브러리의 SocketChannel과 ServerSocketChannel 객체를 사용하여 구현하며,
마찬가지로 ServerSocketChannel 객체의 .accept() 메서드를 통해 신호를 받아, SocketChannel 객체를 생성한다.
현재 채팅의 효율을 위해서라도 논블로킹 방식을 사용해야한다.