sudo yum groupinstall "Development Tools" -y # 安装编译器、make等
sudo yum install gcc-c++ -y # 确保C++编译器
sudo yum install boost-devel -y
sudo yum install libevent-devel -y
sudo yum install openssl-devel -y
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
int main() {
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr{.sin_family=AF_INET, .sin_port=htons(8080), .sin_addr.s_addr=INADDR_ANY};
bind(server_fd, (struct sockaddr*)&addr, sizeof(addr));
listen(server_fd, 5);
int client_fd = accept(server_fd, NULL, NULL);
char buffer[1024];
read(client_fd, buffer, sizeof(buffer));
write(client_fd, "Hello from server", 17);
close(client_fd);
close(server_fd);
return 0;
}
编译:g++ server.cpp -o server非阻塞I/O + epoll(高性能并发)
#include <sys/epoll.h>
// 创建epoll实例并添加监听socket
int epoll_fd = epoll_create1(0);
struct epoll_event event{.events=EPOLLIN, .data.fd=server_fd};
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, server_fd, &event);
// 事件循环
while (true) {
int nfds = epoll_wait(epoll_fd, events, 10, -1);
for (int i = 0; i < nfds; i++) {
if (events[i].data.fd == server_fd) {
// 处理新连接
} else {
// 处理已连接socket的数据
}
}
}
使用Boost.Asio异步编程
#include <boost/asio.hpp>
using boost::asio::ip::tcp;
void handle_accept(tcp::socket& socket, const boost::system::error_code& error) {
if (!error) {
std::string msg = "Hello from server\n";
boost::asio::write(socket, boost::asio::buffer(msg));
}
}
int main() {
boost::asio::io_context io_context;
tcp::acceptor acceptor(io_context, tcp::endpoint(tcp::v4(), 8080));
tcp::socket socket(io_context);
acceptor.async_accept(socket, handle_accept);
io_context.run();
}
编译:g++ server.cpp -o server -lboost_system -lpthread
系统参数调优
# 增加文件描述符限制
ulimit -n 65535
# 优化内核参数(/etc/sysctl.conf)
net.core.somaxconn=65535
net.ipv4.tcp_tw_reuse=1
sysctl -p # 使配置生效
库选择与配置
tcpdump 或 Wireshark 查看网络流量。gprof 或 perf 定位性能瓶颈。systemd管理服务,确保程序后台运行。firewalld)开放端口:sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload