* Refactor carbon-server service in docker-compose.yml to use pre-built image and remove unnecessary build context and volume mounts

* Enhance performance and security features:
- Update compiler flags for better optimization and security.
- Implement MIME type caching for improved response handling.
- Introduce worker thread pool for efficient connection management.
- Optimize socket settings for low latency and enhanced performance.
- Add support for CPU affinity in worker threads.
- Implement graceful shutdown for worker threads during cleanup.

* Optimize HTTP response handling and increase request limits for improved performance

* Add gzip compression support for HTTP responses

* Implement Keep-Alive support for HTTP connections with timeout handling
Why is it not merging like this huh
This commit is contained in:
2025-11-24 20:03:01 +00:00
committed by GitHub
parent b9ffe8bd27
commit 88fee91088

View File

@@ -569,9 +569,23 @@ void *handle_http_client(void *arg)
pthread_exit(NULL); pthread_exit(NULL);
} }
char request_buffer[MAX_REQUEST_SIZE]; // Set socket timeout for Keep-Alive (5 seconds)
memset(request_buffer, 0, MAX_REQUEST_SIZE); struct timeval timeout;
ssize_t bytes_received = recv(client_socket, request_buffer, MAX_REQUEST_SIZE - 1, 0); timeout.tv_sec = 5;
timeout.tv_usec = 0;
setsockopt(client_socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
int keep_alive_count = 0;
const int max_keep_alive = 100;
// Keep-Alive loop: handle multiple requests on same connection
while (server_running && keep_alive_count < max_keep_alive)
{
keep_alive_count++;
char request_buffer[MAX_REQUEST_SIZE];
memset(request_buffer, 0, MAX_REQUEST_SIZE);
ssize_t bytes_received = recv(client_socket, request_buffer, MAX_REQUEST_SIZE - 1, 0);
if (bytes_received > 0) if (bytes_received > 0)
{ {
@@ -844,10 +858,16 @@ void *handle_http_client(void *arg)
} }
done_serving: done_serving:
continue;
} }
else if (bytes_received < 0) else if (bytes_received < 0)
{ {
HANDLE_ERROR("Error receiving request"); break;
}
else if (bytes_received == 0)
{
break;
}
} }
close(client_socket); close(client_socket);