TCP客户端-服务器性能影响

pinkon5k  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(171)

根据服务器规则,是否有可能改进此函数以加快执行速度(甚至微秒)?
在这种情况下,非阻塞如何帮助我?执行次数比其他连接尝试次数少。在这种情况下,非阻塞是否有帮助?如何确保连接之间的等待时间?
关键点是从创建套接字到接收到读取的最快时间,以及每秒尽可能多的连接。

服务器规则/限制:

  • 每12毫秒1个连接。如果您违反此规则并尝试提前连接,则IP将被阻止1200毫秒。
  • 每次接收到读取时,连接都会关闭。
int main()
{
    struct timespec start, end;
    clock_gettime(CLOCK_MONOTONIC, &start);

    while(1)
    {
     clock_gettime(CLOCK_MONOTONIC, &end);
     int elapsed_us = diff_us(end, start);

     // wait until 12ms
     if (elapsed_us < 12000)
     {
         usleep(12000-elapsed_us);
     }

     // check
     clock_gettime(CLOCK_MONOTONIC, &start);
     if (allowed(request)==1)
     {
         dojob();
         return(0);
     }
    }

    return 0;
    }

    int allowed(char request[])
    {

    char server_message[4096];
    memset(server_message,'\0',sizeof(server_message)); 

    int socket_desc = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in server_addr;
    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(port);
    server_addr.sin_addr.s_addr = inet_addr(server);

    connect(socket_desc, (struct sockaddr*)&server_addr, sizeof(server_addr));
    write(socket_desc, request, strlen(request));
    read(socket_desc, server_message, sizeof(server_message));
    
    close(socket_desc);
    char * ret = strstr(server_message, "OK");

    if (ret)
        return 1; // granted, do the job
    else
    {
        uwait(10000);
        return 0; // come back later, repeat asking for the allowance to do the job
    }
}
c9x0cxw0

c9x0cxw01#

我发现有两件事影响了程序的性能。
1.每次迭代的memset,你不需要,read会给你读取的字节数。
1.套接字和连接的创建。
从我的观点来看,你应该关注这个,但是我不清楚你的程序的意图是什么,一些家庭作业可能是?也是遗漏了函数do_job的作用。

相关问题