TCP/IP 클라이언트-서버 통신 속도가 느림

TCP/IP 클라이언트-서버 통신 속도가 느림

몇 가지 웹 애플리케이션을 만들었습니다. TCP/IP 프로토콜을 이용한 클라이언트-서버 솔루션입니다. 클라이언트가 서버에 연결됩니다. 그들은 매초마다 여러 연결을 설정합니다. 통신은 연결당 수백 번 인터리브되어 읽고 쓰여지는 바이트 단위로 구성됩니다. 이것은 내 응용 프로그램의 문제입니다. 연결 길이(바이트)가 늘어나면 통신 속도는 견딜 수 없게 됩니다(한 요청은 5초 동안 지속됩니다). 문제는 짧은 데이터(약 8바이트)의 인터리브 읽기 및 쓰기에 있는 것 같습니다.

내 프로그램은 다음과 같습니다

fd = socket(AF_INET, SOCK_STREAM, 0);

if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (void *)&reuse, (socklen_t)sizeof(reuse)) < 0) {
    // ...
}

if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (void *)&reuse, (socklen_t)sizeof(reuse)) < 0) {
    // ...
}

init_sockaddr(&server_addr, serverport);

if (bind(fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) {
    // ...
}

if (listen(fd, 2048) < 0) {
    // ...
}

while (1) {
    int cl_fd = accept(fd, &sockaddr_in, &sockaddr_len);

    if (read_message(cl_fd, 0, ipv4) < 0) {
        // ...
    }
}

read_message함수 에서 문제의 코드는 다음과 같습니다.

if (write_uint64(fd, n) < 0) {
    // ...
}

if (write_uint64(fd, TASK_SIZE) < 0) {
    // ...
}

if (read_uint64(fd, &clid) < 0) {
    // ...
}

write_uint648바이트 가 전송 되고 read_uint648바이트가 수신됩니다. 이 코드는 일반적으로 하나의 연결에 대한 함수에서 128번 반복됩니다.

내 질문은 왜 작은 데이터 덩어리를 읽고 쓰는 것이 속도를 크게 저하시키는가 하는 것입니다. 여는 것이 TCP_NODELAY나쁜 생각 인가요 ? 쓰기와 읽기가 기다리지 않도록 TCP/IP 연결에서 무엇을 설정해야 합니까?

전체 코드 사용 가능여기.

관련 정보