소켓 통신에서 데이터 전송 속도가 상당히 느립니다.
클라이언트와의 소켓 통신에서 양이 많은 데이터의 전송 속도가 상당히 느립니다.
4096바이트씩 1024번 전송했을 때,
물론 서버에서 클라이언트로 4096바이트 보내고, 클라이언트에서는 서버로 ack를 보내는 것을 1024번 반복합니다.
이때 소요된 시간은 걸립니다.
송수신 버퍼를 클라이언트쪽도 서버 쪽도 64KB씩 늘려 놓았고, Nagle 알고리즘도 disable 시켰습니다.
속도를 향상 시킬 조언좀 부탁드립니다.
아래 코드는 소켓 서버 소스 입니다.
-- 아래 --
:
:
// TCP 서버 소켓 생성
sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0 ){
perror("[X] socket creating ");
exit(0);
}
int bufSize = 64*1024;
int on = 1;
// 소켓의 송수신 버퍼 설정
setsockopt(sock_fd, SOL_SOCKET, SO_SNDBUF, (char*)&bufSize, sizeof(bufSize));
setsockopt(sock_fd, SOL_SOCKET, SO_RCVBUF, (char*)&bufSize, sizeof(bufSize));
// Nagle 알고리즘 disable
setsockopt(sock_fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
// 서버 소켓 설정
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = htons(PORT);
// 서버 소켓 바인딩
bind(sock_fd, (struct sockaddr *)&server_addr, sizeof(server_addr) );
// 서버 소켓 리스닝
listen(sock_fd,1);
signal(SIGCHLD, SIG_IGN);
client_len = sizeof(client_addr);
while(1){
client_socket_fd = accept(sock_fd, (struct sockaddr *)&client_addr, (socklen_t *)&client_len);
:
:
:
}
댓글 달기