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_uint64接收 8 个字节。对于一个连接,此代码通常在函数中重复 128 次。

我的问题是为什么交错读取和写入小块数据会让我的速度减慢这么多?打开是TCP_NODELAY一个坏主意吗?应在 TCP/IP 连接上设置什么以使写入和读取不等待?

完整代码可用这里

相关内容