어디로가야하오
132
2019-01-17 15:25:59
2
289

자바로 멀티스레드 구현시 스레드 관련 질문입니다.


단일 스레드 서버만 한번 만들어보다가 이번에 프로젝트에서 서버를 하나 만들게 되었는데

클라이언트 최소 100대 이상과 붙어야 하는 연계 서버를 만들어야 하는데

쓰레드를 어떻게 관리해야 할지 궁금합니다.

현재는 


메인 부분에 소켓을 열고 클라이언트에서 서버 소켓에 접속이되면 해당 컨넥션을 스레드로 

넘겨주는 방식으로 만들었습니다.


예시로 보자면


Svr_run은 실제로 작업을수행하는 클래스이고 Runnable을 상속받았습니다.


그리고 실제 작업을 수행하는 Svr_run 클래스에서는 소켓 접속인 conn을 받아서

try 문안에 while문으로 루프를 걸어서 한번 연결된 클라이언트와는 Heartbeat로 인한

접속종료나 강제 접속종료 요청을 하지않는 이상 계속 연결되있는 상태로 가기위해 

while 루프로 만들어놨습니다.

로컬에서 서버용 이클립스 하나 띄워놓고 클라이언트용 이클립스 하나 따로 띄워서 계속 중첩해서  실행

돌리면서스레드 몇개까지 처리가 되나 실험을 해보는데 클라이언트 이클립스 하나로 너무많이 실행했더니 클라이언트용 이클립스가 30개쯤 되니까 먼저 뻗어버렷습니다... 서버쪽 이클립스는 클라이언트에서 실행된만큼 역시 스레드는 30개 정도로 돌아가고있었는데 메모리자체는 거의 변함이 없더라고요

물론 간단하게 에코용 서버로 기능 테스트만 먼저 하고있는중이라 그럴수도 있는데 

100개가 넘는 클라이언트가 접속시도를 하고 패킷을 주고 받는다고 할때 이러한 구조로 가는게 맞을까요??

PM분 말로는 서버컴퓨터 하나에 이 프로그램 하나만 돌아갈꺼라서 꽤 여유는 있을거라고는 하는데 

그렇다고해도 너무 안일하게 개발하면 안되니 어떻게 해야할지 궁금합니다..

0
0
  • 답변 2

  • kumaholic
    62
    2019-01-17 16:31:19

    테스트용 클라이언트가 접속하고 나서 어떤 작업을 하게 설정해 놓으셨나요?

    그냥 접속만 테스트 해보신거면 아무 의미 없는것 같아요

    클라이언트는 접속 후 2~3 정도 주기적으로 뭔가를 주고 받게 설정하는게 좋을것 같습니다

    그리고 이클립스로 30개정도 켜진다고 했으니 PM분에게 부탁해서 테스트PC를 구해서 여러대에서 한번에 해보는것도 좋을 것 같아요

    아니면 cmd로 실행해보는것도 좋을듯 합니다

    테스트는 많이 할수록 좋다고 생각해요 이런저런 상황을 만들고 해보세요


    0
  • 어디로가야하오
    132
    2019-01-17 17:39:54

    kumaholic 접속만 시도하진 않고 3초 주기로 클라이언트에서 서버로 메시지를 전달하고 서버는 

    클라이언트의 이름을 확인해서 응답을 날려주는 형식으로 하였습니다.

    cmd로 해보는것도 한번 시도해보겠습니다 ㅎㅎ

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.