背景简介:
基于TCP协议的应用网络服务器程序开发一般对吞吐量和实时性有较高的要求,早期的Linux下实现一般采用I/O多路复用技术,比如使用select,aio等等。为了满足日益高涨的网络应用需求,Linux 自从2.6内核版本后实现了一种性能更高的I/O多路复用技术-EPOLL,与传统的POLL技术不同的是:使用接口API更简单(总共就三个函数),可控制的并发数更大(取决于可用的内存),稳定性更强(异步I/O,伸缩灵活)。
开发环境:
开发平台:云服务器 CentOS 7.3 64bit, 2核CPU,4G内存
编译器: gcc
设计目标:
实现并发10240个客户端连接交互业务数据
实现WEBSOCKET协议(我的项目中服务对象是微信小程序的websocket客户端)
核心代码:
Server.h
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/epoll.h>
#include <errno.h>
#include "ace/Task.h"
#include "ace/Synch.h"
#include "MLog.h"
#include "WebSocketManager.h"
#define MAX_EPOLL_EVENT 1024
class CWebSocketServer : public ACE_Task<ACE_MT_SYNCH>
{
public:
CWebSocketServer(unsigned short wServerPort, CMLog & mLog, CClientManager & clientMgr, CLoginServer & loginServer);
virtual ~CWebSocketServer();
bool Start();
void Stop();
protected:
virtual int open();
virtual int svc();
int SetNonBlock(int nFd);
bool OnNewConnection(int nNewSocket);
void OnCloseConnection(int nFd);
bool OnDataReceived(int nFd, const char * pszDataRecved, size_t nLen);
protected:
unsigned short m_wServerPort;
int m_nServerSocket;
int m_nEpollFd;
struct epoll_event * m_pEpollEvents;
//pthread_t m_thrIdServer;
bool m_bQuit;
CMLog & m_mLog;
char &nbs

本文介绍了在Linux环境下,如何使用C++和EPOLL技术实现高性能的TCP服务器,特别是针对WEBSOCKET协议的实现。文章详细展示了CWebSocketServer类的设计,包括Start、Stop、SetNonBlock等关键函数,以及如何处理新连接、数据接收和关闭连接的过程。
最低0.47元/天 解锁文章
264

被折叠的 条评论
为什么被折叠?



