Relay Server구현과 관련하여 조언을 듣고자 합니다.

3권에서 새로 도입된 네트웍 및 멀티플레이어 프로그로그래밍 섹션을 위한 게시판입니다.

Moderator: 류광

Locked
비회원

Relay Server구현과 관련하여 조언을 듣고자 합니다.

Post by 비회원 »

현재 컴퓨터원격제어와 관련된 프로그램개발로 Relay Server를 구현하고 있습니다.

지금은 각 Client별로 Thread를 돌려서 Thread안에 아래와같이

Code: Select all

while(1)
{
    receive(FromA);

    send(ToB);
}
Receive한 패킷을 바로 Send를 해주고 있습니다.

그런데 이것을 실제 테스트를 해보니 속도가 생각했던거보다 많이 느리더라구요.

원격제어하려고 하는데 화면의 끊김이 심하고 마우스나 키보드에대한 반응도 느리고요.

혹시 속도를 개선할 방법이 있을까요? 찾아보니까 IOCP를 쓰면 성능이 좋아진다고 하는데

속도까지 개선해 주는지 궁금하네요..

단서라도 좋으니 많은 조언 부탁드립니다.
chadr
Posts: 980
Joined: 2003-06-01 12:28
Location: 모대학
Contact:

Post by chadr »

프로파일링을 해봐야지 알겠지만 네트워크 지연 때문에 성능이 저하되는것 같습니다. iocp같은걸 쓰시면 빠르긴 하지만 이런것들은 로컬 컴퓨터에서 버퍼 복사를 최소화 하는 것이므로 네트워크 지연을 해결해주지는 못 합니다.

일단 왜 느린지 원인을 아는게 최선인것 같습니다. 그에 따라서 해결 방법이 달라지니까요. 실제 건너편의 컴퓨터와 네트워크가 느릴수 있으므로 ping과 같은걸로 지연율을 테스트 해보세요.

그리고 서버 프로그램은 프로파일링을 해보세요. 어느 부분에서 가장 느린지요.

마지막으로 스레드가 몇개 생성ㅤㄷㅚㅆ는지 확인해보시고 소켓 옵션에 TCP_NODELAY가 켜져있는지 확인해보세요. 스레드가 너무 많으면 cpu 사용율은 올라가는데 프로그램은 늦게 동작할것입니다.
비회원

프로파일링 해볼 필요도 없어보이는군요.

Post by 비회원 »

클라이언트당 스레드를 할당해준다는건 말도 안됩니다 -_-;;

릴레이 서버가 어느 정도 접속량을 커버해야 할지는 잘 모르겠지만 모델을 바꾸십시요..
Locked