Q&A

  • 타이머 질문입니다..
제가 지금 피시방 프로그램 같은걸 만들어보고자 여기저기 자료를 모으고 있습니다..

구체적으로 제가 구현하고 싶은것은 클라이언트가 접속을 하면 서버에서 시간을 가동시키는 프로그램을

구현하고 싶습니다. 그러니까 클라이언트가 하나 붙으면 사용시간을 서버에서 표시해주고(물론 클라이언트에서

도 보여주어야겠지요)

또 잠시 멈추고 다시 시작도 하고 싶습니다.

제가 얼핏 생각하기에는 클라이언트가 붙으면 거기에 타이머 하나 생성해서 돌리면 될것 같은데

클라인언트수가 최소 30개정도인데 이렇게 프로그램밍 하는것이 정상적인지.. 아니면 잘은 모르겠지만

쓰레드라는것을 써야 하는것인지 타이머를 쓰면 자원을 너무 많이 차지한다는 얘기를 들은것도 같고

하여간 이 부분 때문에 고민을 하고 있습니다.

인디를 통해 서버와 클라이언트를 붙이는것까지는 성공했습니다.

이 사용시간을 구현해야 하는데 조언을 구하고자 질문올립니다.

컴퓨터 부하를 최소화하고 효율적으로 구현할 수 있는 방법 좀 알려주시면 정말 고맙겠습니다..
4  COMMENTS
  • Profile
    강태원 2008.05.22 19:23
    글쎄요.

    다른분도 이미 답변 하셨지만 서버쪽에서는 타이머 하나로 충분합니다.

    그리고 클라이언트가 붙을경우 클라이언트 접속시간을 바탕으로 현재시간과의 차이를 계산하면 되지요.

    만약 중간에 클라이언트가 멈췄다가 들어오거나 나갔다가 들어온다면 해당 시간만을 뺀 차이를 계산하면 되고요.

    그리고 서버를 뭘 쓸지는 모르지만 요즘 하드웨어상에서는 타이머 30개 쓴다고 해서 큰문제는 없을겁니다.

    단 해당 타이머에서 많은 로직을 처리한다면 문제가 되겠지만요.

  • Profile
    바람의아빠 2008.05.24 06:39
    답변 감사드립니다..^^


  • Profile
    이정욱 2008.05.22 09:19
    그럴 필요는 없을것 같습니다.
    클라이언트 쪽에는 당연히 타이머가 하나 있어서 시간을 보여주겠지만, 서버쪽에서는 타이머 하나면 됩니다.

    1. 클라이언트가 서버에 접속한다.
    2. 서버는 클라이언트 번호의 접속 시간을 기록하거나 기억한다.
    3. 서버는 1초에 한번씩 30개의 클라이언트 시간을 현재 시간에서 빼서 보여준다.

    이러면, 하나의 타이머로 그냥 처리됩니다. ^^

  • Profile
    머문자리 2008.05.26 18:24
    저도 이부분에 대해 많이 생각했는데..
    중요한게 있습니다.

    서버와 클라이언트가 계속 붙어 있을경우만 생각하지 마시고.. 클라이언트와의 일시적인 통신이 끊어졌을때도 생각하셔야 합니다.

    즉, 기준은 서버시간을 기준으로 하되.. 서버시간이 클라이언트 시간보다 적은 경우는 서버시간을 업데이트 하여 주셔야 됩니다.
    (서버 프로그램의 오작동의 경우 ex.프로그램 재실행등..)

    클라이언트야 자주 재부팅 될테니.. 서버시간에 맞추어 업데이트 하는게 당연하구여..

    약간이나마 조언이 되셨길 바랍니다.