一、多线程并发服务器
在 高并发的 TCP 服务器 中,单线程或 fork() 多进程 方式会导致 资源浪费和性能瓶颈。因此,我们可以利用 多线程 来高效处理多个客户端的毗连。
承接上文中的多进程并发服务器,代码优化目的:
- 1.使用 pthread 实现多线程服务器
- 2.每个客户端连接后,服务器创建一个独立线程进行处理
- 3.回显(Echo)客户端发送的消息
- 4.支持多个客户端同时连接
- 5.主线程负责监听连接,子线程负责处理客户端请求
复制代码 完整代码:
[code]#include <stdio.h> // 标准输入输出
#include <stdlib.h> // exit()、malloc()、free()
#include <string.h> // 字符串操作
#include <unistd.h> // read(), write(), close()
#include <arpa/inet.h> // sockaddr_in, inet_addr()
#include <sys/socket.h> // 套接字 API
#include <netinet/in.h> // sockaddr_in 结构体
#include <pthread.h> // 线程 API
#define PORT 8080 // 服务器监听端口
#define BUFFER_SIZE 1024 // 缓冲区大小
#define MAX_CLIENTS 100 // 最大客户端连接数
// **线程处理客户端请求**
void *handle_client(void *arg) {
int client_fd = *((int *)arg);
free(arg); // 释放动态分配的内存
char buffer[BUFFER_SIZE];
int bytes_read;
printf("✅ 客户端线程启动,处理客户端 %d\n", client_fd);
while (1) {
memset(buffer, 0, BUFFER_SIZE); // 清空缓冲区
bytes_read = read(client_fd, buffer, BUFFER_SIZE);
if (bytes_read <= 0) {
printf("❌ 客户端 %d 断开连接\n", client_fd);
break; // 退出循环,关闭连接
}
printf(" |