gpt4 book ai didi

c - 从客户端到服务器建立 1000 个 TCP/IP 连接的延迟

转载 作者:太空宇宙 更新时间:2023-11-04 11:08:00 24 4
gpt4 key购买 nike

我想与服务器建立 1000 个连接。只有在建立所有连接后,我才想开始在连接上发送或接收数据。

服务器很简单,它只是接受连接,然后顺序执行读写。服务器有 8192 的积压并阻止从第一个连接读取:

// Why doesn't backlog of 8192 allow the client to establish 1000 connections?
listen(serversocket, 8192);
while(1) {
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(client_addr);
int fd = accept(serversocket, (struct sockaddr*)&client_addr, &client_addr_len);

// This blocks the server on a read from the 1st connection
short data1;
read(fd, &data1, sizeof(data1));

char data2[32];
write(fd, data2, sizeof(data2));

close(fd);
}

客户端包含以下代码:

int sockfds[1000];
int i;
for(i=0; i<1000; i++) {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
sockfds[i] = sockfd;

struct sockaddr_in servaddr;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servaddr.sin_port = htons(5678);

connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("%d: connected\n", i);
}

// ... read from sockfds[j], write to sockfds[j]

前 130 个连接在几毫秒内建立。但是,连接 130...999 的建立非常缓慢,速度约为每秒 1 个连接。

为了在几毫秒内建立所有 1000 个连接,client.c 应该做什么?为什么8192的积压不允许客户端建立1000个连接?

最佳答案

解决方法是将/proc/sys/net/core/somaxconn设置为大于1000的值。

默认值为 128。这解释了为什么客户端在与服务器建立大约 130 次连接后会遇到延迟增加的原因。

关于c - 从客户端到服务器建立 1000 个 TCP/IP 连接的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24381647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com