어디로가야하오
192
2020-01-21 14:52:04
4
292

자바로 멀티쓰레드 소켓서버 만들때 많은경우 몇개까지 돌려보셧나요??


예전에 하던 프로젝트중에 자바로 멀티스레드 서버를 만든적이있었는데 

네티 프레임워크가 아닌 순수 자바의 소켓으로만 멀티 스레드 서버만들었을때 다른분들은 몇대의 

클라이언트 장비들과 통신을 해보셨는지 궁금해서 질문드립니다.

당시에 개발할때 한 장비로부터 받는 패킷이 30초에 한번씩 대략 10만바이트의 패킷을 받아서 처리를

하는데 약 50대의 클라이언트와 통신을 했었습니다. 

이정도에서도 안정화시키는데 꽤 시간이 오래걸렸었는데 물론 안정화가 되어서 죽는일은 없었으나 

속도문제에서는 아쉬운점이 많았습니다. 최적화가 좋지않아서 ㅠㅠ

okky 선배분들은 어느정도의 멀티스레드 소켓서버를 구축해보셧고 주고받는 패킷이 많을때의 노하우같은

점도 궁금합니다!

0
  • 답변 4

  • 쥬라기
    332
    2020-01-21 15:07:44

    전상망 속도가 얼마나 될지 모르겠지만 10만바이트면 100MB 입니다.

    점점 시대가 흐를수록 전송속도가 빨라졌다지만 100MB면 상당히 크네요;

    c++이긴 합니다만, 가장 높았던 평균치는 1만 클라이언트 소켓 연결이고, 주고받는 패킷량 자체는 크지는 않지만 평균적인 네트워크 전송 i/o는 60MB / 500MB / 평균 주고받는 패킷 갯수 70만개 정도였네요.


    물론 전체적으로 패킷당 크기가 작아서 괜찮았던거 같긴한데... 최적화는 그냥 주구장창 프로파일러 돌리면서 시간 많이 걸리는 부분들 위주로 처리했던거 같네요.

    최소한의 io만 사용하게끔도 돌려주고, 네트워크쪽 처리는 그냥 읽어들이고 보내는 역할만 딱 할 수 있도록 분리하고요.

  • 어디로가야하오
    192
    2020-01-21 15:13:59

    쥬라기 

    1만 클라이언트 엄청나네요... 그러면 스레드도 1만개로 돌아간건가요?

  • 쥬라기
    332
    2020-01-21 15:33:02

    아뇨;;; 스레드는 읽기용 쓰기용 각각 다 따로따로 돌았고,

    보통 한 단위당 프로세스 코어수*2 만큼 스레드를 돌렸어요.


    ex. 코어수 4 -> 읽기용 8개, 쓰기용 8개


    이런 형태입니다

  • 어디로가야하오
    192
    2020-01-21 21:40:43
  • 로그인을 하시면 답변을 등록할 수 있습니다.