java.net.serversocket 

이 클래스는 서버 소켓을 구현합니다. 서버 소켓은, 네트워크 경유로 요구가 보내져 오는 것을 기다립니다. 이것은, 그 요구에 근거해 몇개의 조작을 실행합니다. 그 후, 경우에 따라서는 요구 바탕으로 결과를 돌려줍니다.  

서버 소켓의 실제의 처리는,SocketImpl 클래스의 인스턴스에 의해 실행됩니다. 어플리케이션은, 소켓 구현을 작성하는 소켓 팩토리를 변경하는 것으로, 로컬 방화벽(fire wall)에 적절한 소켓을 작성하도록(듯이) 어플리케이션 자체를 구성할 수가 있습니다.

도입된 버젼:
JDK1. 0
관련 항목:
SocketImpl , setSocketFactory(java.net.SocketImplFactory) , ServerSocketChannel

=>서버 소켓의 accecpt() 메서드는 인터페이스 클래스(상위 클래스) 구현 클래스(하위클래스)
로 구성되었다(왜냐묜.. 소스코드 로직 유출 막을라고;; 사실 클라가 알 필요도 없고.. 추상화)

imple 클래스 선언부만 보면 아주 심플함.. 서버 소켓도 될수 있고, 일반 소켓도 될수
있고.. 게다가 인터페이스(메서드)의 경우.. 초 단순.. create , connect, accept , bind,
listen, getInputStream, getOutputStream, close .. 물론 다른 메서드도 있지만.. 초심플
아닌가??  


44 public abstract class More ...SocketImpl implements SocketOptions {
    
The actual Socket object.
47 
48     Socket socket = null;
49     ServerSocket serverSocket = null;

54     protected FileDescriptor fd;

59     protected InetAddress address;


64     protected int port;

69     protected int localport;


79     protected abstract void More ...create(boolean stream) throws IOException;

89     protected abstract void More ...connect(String host, int port) throws IOException;

99     protected abstract void More ...connect(InetAddress address, int port) throws IOException;

112    protected abstract void More ...connect(SocketAddress address, int timeout) throws IOException;

121    protected abstract void More ...bind(InetAddress host, int port) throws IOException;

132    protected abstract void More ...listen(int backlog) throws IOException;

141    protected abstract void More ...accept(SocketImpl s) throws IOException;

150    protected abstract InputStream More ...getInputStream() throws IOException;

159    protected abstract OutputStream More ...getOutputStream() throws IOException;

170    protected abstract int More ...available() throws IOException;

177    protected abstract void More ...close() throws IOException;

194    protected void More ...shutdownInput() throws IOException {
195      throw new IOException("Method not implemented!");
196    }

214    protected void More ...shutdownOutput() throws IOException {
215      throw new IOException("Method not implemented!");
216    }

224    protected FileDescriptor More ...getFileDescriptor() {
225        return fd;
226    }

234    protected InetAddress More ...getInetAddress() {
235        return address;
236    }

244    protected int More ...getPort() {
245        return port;
246    }

257    protected boolean More ...supportsUrgentData () {
258        return false; // must be overridden in sub-class
259    }

269    protected abstract void More ...sendUrgentData (int data) throws IOException;

277    protected int More ...getLocalPort() {
278        return localport;
279    }
280
281    void More ...setSocket(Socket soc) {
282        this.socket = soc;
283    }
284
285    Socket More ...getSocket() {
286        return socket;
287    }
288
289    void More ...setServerSocket(ServerSocket soc) {
290        this.serverSocket = soc;
291    }
292
293    ServerSocket More ...getServerSocket() {
294        return serverSocket;
295    }

302    public String More ...toString() {
303        return "Socket[addr=" + getInetAddress() +
304            ",port=" + getPort() + ",localport=" + getLocalPort()  + "]";
305    }
306
307    void More ...reset() throws IOException {
308        address = null;
309        port = 0;
310        localport = 0;
311    }

350
351    protected void More ...setPerformancePreferences(int connectionTime,
352                                          int latency,
353                                          int bandwidth)
354    {
355        /* Not implemented yet */
356    }
357}


***************************************************************

소켓의 인풋스트림에 뭔가 데이터가 들어왔을때.. 통지 해주는 객체와 내가 리스너(콜백메서드)
를 정의해서 붙여주는 처리는 아닌가? 
그냥 while()문에서 0.001초마다 메세지 들어와있나 확인해야 하나?

그리고 iocp개념, non blocking 통신은.. 아..................


iocp 관련 논의 (자바에선 어찌하는지 찾아봐야함)

http://www.gamecodi.com/board/zboard-id-GAMECODI_Talkdev-no-1607-z-14.htm

(추가)
다중 접속 처리를 위해 -> 소켓당 여러 프로세스 배정 -> 조금 더 가벼운 멀티 스레드 할당 ->
스레드 풀의 개념(스레드 생성,소멸 시간 절약해 재사용) -> 메모리 문제, 성능 문제등이 발생을
한다. 동기화 IO의 한계가 존재함으로.. 비동기 IO인 NIO패키지로 해결을 하며, 고속의 성능이
필요할 경운.. 자바가 아닌 C++ 등으로 구현하는 것이 현명할 것이다.

(추가)
NODE JS 를 공부하게 되었다. 싱글 스레드 서버로서 파일등 I/O의 경우는 비동기로 처리한다.(이벤트
큐와 리스너와 콜백)

NODE의 경우 싱글 스레드로서, 동기화의 문제 , 멀티스레드 문제를 극복하게 하지만, 싱글 스레드 임으로
서버 컴퓨터(멀티코어)의 능력을 제대로 쓰기 위해서는 클러스터 모듈을 사용해서 분산 처리해야 한다.
또한 서버단에서 CPU 연산이 많은 작업을 하게 되면, 비동기적 프로그래밍을 제대로 구현하지 못할 경우..
 병목 현상이 발생한다. 서버는 참으로 어렵고 크리티컬한 분야이다.


게임서버 관련 쟁점
http://cafe.naver.com/jzsdn/23094?social=1

(추가)
게임 서버는.. 다중 접속, 빠른 처리, 지역 분할과 동기화란.. 너무나 많은 이슈가 걸려있다.

서버 동작 방식 결정하게끔 생성하는 팩토리 메서드 패턴?
http://cafe.naver.com/gogoxna/934

(추가)
일단 팩토리 패턴이란.. 객체 생성 과정을 추상화 하기 위한 개념이다. GETINSTANCE ("객체 이름")
서로 다른 모듈(또는 시스템)간에는 서로를 구체적으로 몰라야 유연성(루즈커플링)이 높아진다.
유연성이 높아야, 변경에 취약하지가 않게 된다.


'자바se api > net' 카테고리의 다른 글

네트워크 관련  (0) 2014.01.01
java.net.socket 파고들기2  (0) 2014.01.01
java.net.socket 파고들기1  (0) 2014.01.01
by givingsheart 2014. 1. 1. 16:14