udp통신에 대한 문의
글쓴이: darkman76 / 작성시간: 일, 2015/05/31 - 1:41오전
udp통신에 대해서 문의드립니다.
제가 1초당 정보를 송/수신 하고 있으며 패킷 사이즈는 15byte 됩니다.
클라이언트 갯수는 1000개 정도 됩니다.
근데 1초당 정보이면 1,2,3,4,5,6,7,8,9,10 이렇게 데이터가 나와야 하는데 1,3,4,8,10 이렇게 불규칙적으로 나오더군요
그래서 보내는쪽 패킷과 받는쪽 패킷을 봤더니 보내는 쪽은 정확히 보내는데 받는쪽에서 중간중간 15byte의 한 패킷이 싹 다 손실이 되서
받지 못하더군요 이런 경험 해보신분 있으신지요?
100개 정도의 크라이언트는 이 증상이 적은데 갯수가 많아 질수록 심해집니다.
그렇다면 하나의 udp 쓰레드와 포트로 통신하던거를 한 10개로 하면 더 좋아질지 아니면 아예 속도를 포기하고 tcp/ip로 가야 할지 답답하네요
tcp/ip로 쓰레드를 천개를 만든다는것이 불가능한게 이미 하나의 프로세스에서 현장 장비에 tcp/ip로 1000개를 만들어서 tcp/ip로 통신하고 있고
수집된 정보를 내부 서버끼리 udp통신을 하고 있는 중입니다.
경험 많으신 분들 답변좀 부탁드립니다.
Forums:
반드시 정확히 도착해야 하는 것이라면, TCP를
반드시 정확히 도착해야 하는 것이라면, TCP를 쓰시는 것을 권합니다.
그리고 TCP 소켓을 스레드 수만큼 만들 필요가 없습니다. IOCP나 epoll등을 쓰면 한개나 몇개의 스레드만으로 많은 수의 TCP 소켓을 처리할 수 있습니다.
요즘 서버 컴퓨터 수준에서는 1초에 15바이트를 주는 정도면 서버 한대에서 10만개 이상의 커넥션도 충분히 소화합니다.
----------
게임 서버 엔진 개발자입니다.
https://blog.naver.com/imays
tcp/ip 로 1000개를 만들 필요가 없습니다.
tcp/ip 로 1000개를 만들 필요가 없습니다.
윗분처럼 몇개 쓰레드로 1000 개를 처리하도록 하시면 될 것이라고 보이고 몇개의 쓰레드로 할지는 구글링을 해보시기 바랍니다.
쓰레드가 많아지면 쓰레드간 컨텍스트 스위칭 시간때문에 오히려 속도 면에서 불리합니다.
15 byte X 1000 개 해봐야 15 kbyte 인데 정말 아무것도 아닌 데이터 양입니다.
UDP의 경우 소켓이나 연결 상황에 따라서 사라질 수 있기는 한데 15 byte 라면 그렇지도 않을 것 같고요.
다음 클라이언트에 보내기 전에 한 10 usec 정도 딜레이를 줘 보세요.
threadA()
{
while (i, 1: 100) {
sendto (i);
delay (10us);
i++;
}
}
댓글 달기