温馨提示×

Linux C++如何做服务器

小樊
46
2026-07-17 06:29:04
栏目: 云计算

在 Linux 下用 C++ 做服务器,通常分为 基础网络服务器现代工程化服务器 两大类。下面从入门到进阶,给你一个清晰路线,并附示例代码。


一、最基础:使用 Socket 编程(必须掌握)

这是 Linux C++ 服务器最核心、最底层的方式。

核心技术

  • Berkeley Sockets
  • socket / bind / listen / accept / recv / send
  • TCP / UDP
  • I/O 多路复用(select / poll / epoll

二、最简单的 TCP 服务器示例(阻塞式)

1️⃣ TCP Server(单连接)

#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>

int main() {
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);

    sockaddr_in addr{};
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8080);
    addr.sin_addr.s_addr = INADDR_ANY;

    bind(server_fd, (sockaddr*)&addr, sizeof(addr));
    listen(server_fd, 10);

    std::cout << "Server listening on port 8080..." << std::endl;

    int client_fd = accept(server_fd, nullptr, nullptr);

    char buf[1024]{};
    read(client_fd, buf, sizeof(buf));
    std::cout << "Client: " << buf << std::endl;

    send(client_fd, "Hello from server", 18, 0);

    close(client_fd);
    close(server_fd);
}

✅ 适合学习
❌ 一个客户端、阻塞、不能并发


三、并发服务器(重点)

方式一:多进程(fork)

if (fork() == 0) {
    // child process
    close(server_fd);
    // handle client
    exit(0);
}

方式二:多线程(pthread)

#include <pthread.h>

void* handle(void* arg) {
    int fd = *(int*)arg;
    // handle client
    close(fd);
    return nullptr;
}

✅ 简单
❌ 性能一般


四、高性能服务器:epoll(重点)

epoll 机制

  • epoll_create
  • epoll_ctl
  • epoll_wait

epoll 示例(核心结构)

int epfd = epoll_create(1);
epoll_event ev, events[1024];

ev.events = EPOLLIN;
ev.data.fd = server_fd;
epoll_ctl(epfd, EPOLL_CTL_ADD, server_fd, &ev);

while (true) {
    int n = epoll_wait(epfd, events, 1024, -1);
    for (int i = 0; i < n; ++i) {
        if (events[i].data.fd == server_fd) {
            // accept
        } else {
            // recv
        }
    }
}

✅ 高并发(10万+连接)
✅ Linux 服务器主流方案


五、现代 C++ 服务器方案(推荐)

1️⃣ 使用 Boost.Asio(跨平台)

#include <boost/asio.hpp>
using namespace boost::asio;

io_context io;
ip::tcp::acceptor acc(io, ip::tcp::endpoint(ip::tcp::v4(), 8080));

✅ 异步
✅ 工程化
✅ 企业常用


2️⃣ 使用第三方库(快速开发)

说明
muduo 陈硕,Linux 高性能
libevent C 风格
libuv Node.js 底层
Poco 企业级

六、服务器常见架构

Client
   ↓
Reactor / Epoll / IO Multiplexing
   ↓
Worker Thread Pool
   ↓
Business Logic
   ↓
Database / Cache

七、服务器开发必备知识

✅ Linux 系统编程
✅ 网络协议(TCP/IP、HTTP)
✅ 多线程 / 线程池
✅ 内存管理
✅ 日志、配置、信号处理
✅ 性能调优(fd、backlog、send buffer)


八、学习路线建议

✅ 初级

  1. 写一个 TCP echo server
  2. 使用多线程处理客户端
  3. 理解阻塞 / 非阻塞

✅ 中级

  1. epoll + 非阻塞 IO
  2. 实现一个简单 HTTP 服务器
  3. 加入线程池

✅ 高级

  1. Reactor 模型
  2. 连接管理、心跳
  3. 高并发压测

九、我可以继续帮你

你可以告诉我:

  • ✅ 想做 Web 服务器 / 游戏服务器 / RPC 服务器
  • ✅ 是否 零基础 / 有 C++ 基础
  • ✅ 想用 纯 Linux API / Boost / 第三方库

我可以直接给你 完整项目结构 + Makefile + 实战代码

0