实现HTTP服务架构

This commit is contained in:
lixiaoyuan
2025-08-31 14:38:53 +08:00
parent 4af4e670d2
commit e0b64a20c4
46 changed files with 1436 additions and 545 deletions

View File

@@ -11,6 +11,12 @@
using namespace std;
enum class ETcpType
{
SERVER = 0,
CLIENT = 1,
};
enum class ETcpEvent
{
NUL = 0, //
@@ -32,80 +38,54 @@ class TcpEntity : public CommEntity, public std::enable_shared_from_this<TcpEnti
public:
struct Client
{
std::string clientId;
SOCKET sock;
SOCKADDR_IN sock_addr;
SOCKADDR_IN sockaddr;
std::string host;
std::shared_ptr<TcpParser> parser = nullptr;
};
public:
// 初始化服务端
TcpEntity(TcpHandler* handler = nullptr);
TcpEntity();
~TcpEntity();
int start() override;
void close() override;
void runThreadTcp();
void setHost(string host, int port, bool is_client);
std::string host() { return host_; }
int port() { return port_; }
std::string hostport() { return host_ + ":" + std::to_string(port_); }
void setAddr(string host, int port, int commtype);
std::string getAddr() { return addr; }
std::string getAddrPort() { return addr + ":" + std::to_string(port); }
int getPort() { return port; }
void setReconnect(int ms);
bool isClient() { return isClient_; }
void setHandler(TcpHandler* handler);
bool sendData(std::string data, std::string clientId="");
bool isAlive();
bool isConnected();
std::shared_ptr<TcpParser> parser = nullptr;
bool write(std::string data);
private:
void runServerLoop();
void runServerRecvLoop(Client client, std::string client_name);
void runClientLoop();
private:
// 本机的SOCKET对象
SOCKET sock_ = INVALID_SOCKET;
SOCKET sock = INVALID_SOCKET;
// socket addr信息
SOCKADDR_IN sockaddr_;
// TCP类型是否是客户端 true: 客户端, false: 服务端
bool isClient_ = true;
SOCKADDR_IN sockaddr {};
// 通讯地址,作为客户端时有效
std::string host_;
std::string addr;
// 通讯端口
int port_ = 0;
int port = 0;
// 重连间隔时间,单位秒
int tReconnect_ = 0;
// 作为服务端时连接的客户端SOCKET
std::vector<Client> vecClient_;
// 回调处理对象
TcpHandler* handler_ = nullptr;
bool isAlive_ = false;
bool isCloseRequest_ = false;
bool isConnected_ = false;
std::vector<Client> vecClient;
// 状态更新时间戳
int64_t ts_;
int64_t ts_ = 0;
int64_t tsHeartbeat_=0;
int64_t tsHeartbeat_ = 0;
};
class TcpHandler