Skip to content

Latest commit

 

History

History
476 lines (266 loc) · 11.2 KB

TCPEpollServer.md

File metadata and controls

476 lines (266 loc) · 11.2 KB

TCPEpollServer

介绍

TCP 服务器,基于 Epoll 实现。

ServerInterface 的子类。

文件配置可参见 conf.template 相关条目。

命名空间

namespace fpnn;

关键定义

class TCPEpollServer: virtual public ServerInterface
{
public:
	virtual ~TCPEpollServer();

	static TCPServerPtr create();

	static TCPEpollServer* nakedInstance();
	static TCPServerPtr instance();

	virtual bool startup();
	virtual void run();
	virtual void stop();

	virtual void setIP(const std::string& ip);
	virtual void setIPv6(const std::string& ipv6);
	virtual void setPort(uint16_t port);
	virtual void setPort6(unsigned short port);
	virtual void setBacklog(int backlog);

	virtual uint16_t port() const;
	virtual uint16_t port6() const;
	virtual std::string ip() const;
	virtual std::string ipv6() const;
	virtual uint16_t sslPort() const;
	virtual uint16_t sslPort6() const;
	virtual std::string sslIP() const;
	virtual std::string sslIP6() const;
	virtual int32_t backlog() const;

	inline void setMaxEvents(int maxCount);
	inline void setIoBufferChunkSize(size_t size);

	int maxEvent() const;
	size_t ioBufferChunkSize() const;

	virtual void setQuestProcessor(IQuestProcessorPtr questProcessor);
	virtual IQuestProcessorPtr getQuestProcessor();
	inline void setEstimateMaxConnections(size_t estimateMaxConnections, int partitionCount = 128);
	inline void setMaxConnectionLimitation(int maxConnectionLimitation);
	inline int maxConnectionLimitation();
	inline int currentConnections();
	inline void configWorkerThreadPool(int32_t initCount, int32_t perAppendCount, int32_t perfectCount, int32_t maxCount, size_t maxQueueSize);
	inline void enableAnswerCallbackThreadPool(int32_t initCount, int32_t perAppendCount, int32_t perfectCount, int32_t maxCount);

	void closeConnection(const ConnectionInfo* ci);
	inline void closeConnection(const ConnectionInfo& ci);

	/*
		Experimental interface.
		** Maybe change or remove in following version. **
	*/
	void closeConnectionAfterSent(const ConnectionInfo* ci);
	inline void closeConnectionAfterSent(const ConnectionInfo& ci);

	inline void setQuestTimeout(int64_t seconds);
	inline int64_t getQuestTimeout();
	inline void setIdleTimeout(int64_t seconds);
	inline int64_t getIdleTimeout();

	virtual std::string workerPoolStatus();
	virtual std::string answerCallbackPoolStatus();
	inline bool encrpytionEnabled();
	inline bool enableEncryptor(const std::string& curve, const std::string& privateKey);
	static void enableForceEncryption();

	inline bool ipWhiteListEnabled();
	inline void enableIPWhiteList(bool enable = true);
	inline bool addIPToWhiteList(const std::string& ip);
	inline bool addSubnetToWhiteList(const std::string& ip, int subnetMaskBits);
	inline void removeIPFromWhiteList(const std::string& ip);
};

typedef std::shared_ptr<TCPEpollServer> TCPServerPtr;

注意

代码中,class TCPEpollServer 的非文档化基类,和非文档化的接口可能随时会更改。因此,请仅使用本文档中,明确列出的接口。

成员函数

create

static TCPServerPtr create();

创建 TCPEpollServer 实例。

目前 FPNN Framework 是单例。如果 TCPEpollServer 已经创建,将返回已创建的实例。

nakedInstance

static TCPEpollServer* nakedInstance();

获取 TCPEpollServer 单例的裸指针。如果单例没有被创建,则返回 NULL

instance

static TCPServerPtr instance();

获取 TCPEpollServer 单例的智能指针。如果单例没有被创建,则返回 nullptr

startup

virtual bool startup();

启动服务器。

run

virtual void run();

服务器主循环。

stop

virtual void stop();

停止服务器。

setIP

virtual void setIP(const std::string& ip);

设置需要绑定的 IP v4 地址。

setIPv6

virtual void setIPv6(const std::string& ipv6);

设置需要绑定的 IP v6 地址。

setPort

virtual void setPort(uint16_t port);

设置需要绑定的 IP v4 端口。

setPort6

virtual void setPort6(unsigned short port);

设置需要绑定的 IP v6 端口。

setBacklog

virtual void setBacklog(int backlog);

设置 accept 等候队列长度。

port

virtual uint16_t port() const;

获取绑定的 IP v4 端口。

port6

virtual uint16_t port6() const;

获取绑定的 IP v6 端口。

ip

virtual std::string ip() const;

获取绑定的 IP v4 地址。

ipv6

virtual std::string ipv6() const;

获取绑定的 IP v6 地址。

sslPort

virtual uint16_t sslPort() const;

获取绑定的 SSL/TLS IP v4 端口。

sslPort6

virtual uint16_t sslPort6() const;

获取绑定的 SSL/TLS IP v6 端口。

sslIP

virtual std::string sslIP() const;

获取绑定的 SSL/TLS IP v4 地址。

sslIP6

virtual std::string sslIP6() const;

获取绑定的 SSL/TLS IP v6 地址。

backlog

virtual int32_t backlog() const;

获取 accept 等候队列长度。

setIoBufferChunkSize

inline void setIoBufferChunkSize(size_t size);

设置在执行非加密数据接收、SSL/TLS (FPNN) 加密数据接收、HTTP/HTTPS 数据接收时,接收用的链式缓存 (ChainBuffer)[../base/ChainBuffer.md] 单位缓存块的大小。

ioBufferChunkSize

size_t ioBufferChunkSize() const;

获取在执行非加密数据接收、SSL/TLS (FPNN) 加密数据接收、HTTP/HTTPS 数据接收时,接收用的链式缓存 (ChainBuffer)[../base/ChainBuffer.md] 单位缓存块的大小。

setQuestProcessor

virtual void setQuestProcessor(IQuestProcessorPtr questProcessor);

配置服务器事件和请求处理模块。具体可参见 IQuestProcessor

getQuestProcessor

virtual IQuestProcessorPtr getQuestProcessor();

获取服务器事件和请求处理模块。具体可参见 IQuestProcessor

setEstimateMaxConnections

inline void setEstimateMaxConnections(size_t estimateMaxConnections, int partitionCount = 128);

设置 TCPEpollServer 支持的连接数峰值。

注意

  • 该接口为调优使用,一般情况采用默认配置即可,无需调用。
  • 该接口必须在 TCPEpollServer 启动前调用。否则将会被忽略。

参数说明

  • size_t estimateMaxConnections

    预估的 TCPEpollServer 峰值的连接数。

  • int partitionCount

    连接管理模块的数量。

setMaxConnectionLimitation

inline void setMaxConnectionLimitation(int maxConnectionLimitation);

设置 TCPEpollServer 支持的最大连接数限制。

maxConnectionLimitation

inline int maxConnectionLimitation();

获取 TCPEpollServer 支持的最大连接数限制。

currentConnections

inline int currentConnections();

获取当前服务器的链接数量。

configWorkerThreadPool

inline void configWorkerThreadPool(int32_t initCount, int32_t perAppendCount, int32_t perfectCount, int32_t maxCount, size_t maxQueueSize);

配置 TCPEpollServer 的工作线程池。

注意

  • 一般情况采用默认配置即可。
  • 该接口必须在 TCPEpollServer 启动前调用。否则将会被忽略。
  • 如果在显示调用该接口,则配置文件中的相关配置将被忽略。

参数说明

  • int32_t initCount

    初始的线程数量。

  • int32_t perAppendCount

    追加线程时,单次的追加线程数量。

    注意,当线程数超过 perfectCount 的限制后,单次追加数量仅为 1

  • int32_t perfectCount

    线程池常驻线程的最大数量。

  • int32_t maxCount

    线程池线程最大数量。如果为 0,则表示不限制。

enableAnswerCallbackThreadPool

inline void enableAnswerCallbackThreadPool(int32_t initCount, int32_t perAppendCount, int32_t perfectCount, int32_t maxCount);

配置 TCPEpollServer 处理 Server Push 应答的线程池。

注意

  • 一般情况采用默认配置即可。
  • 该接口必须在 TCPEpollServer 启动前调用。否则将会被忽略。
  • 如果在显示调用该接口,则配置文件中的相关配置将被忽略。

参数说明

  • int32_t initCount

    初始的线程数量。

  • int32_t perAppendCount

    追加线程时,单次的追加线程数量。

    注意,当线程数超过 perfectCount 的限制后,单次追加数量仅为 1

  • int32_t perfectCount

    线程池常驻线程的最大数量。

  • int32_t maxCount

    线程池线程最大数量。如果为 0,则表示不限制。

closeConnection

void closeConnection(const ConnectionInfo* ci);
inline void closeConnection(const ConnectionInfo& ci);

关闭指定链接。ConnectionInfo 请参见连接信息对象 ConnectionInfo

closeConnectionAfterSent

void closeConnectionAfterSent(const ConnectionInfo* ci);
inline void closeConnectionAfterSent(const ConnectionInfo& ci);

发送完当前数据后,关闭指定链接。ConnectionInfo 请参见连接信息对象 ConnectionInfo

setQuestTimeout

inline void setQuestTimeout(int64_t seconds);

设置 TCP Server Push 请求超时的全局默认值。

getQuestTimeout

inline int64_t getQuestTimeout();

获取 TCP Server Push 请求超时的全局默认值。

setIdleTimeout

inline void setIdleTimeout(int64_t seconds);

设置空闲时间。

如果链接在指定的空闲时间内,没有完整的数据包收发,则 TCPEpollServer 将关闭链接。0 表示不限制。

getIdleTimeout

inline int64_t getIdleTimeout();

获取空闲时间设置。

workerPoolStatus

virtual std::string workerPoolStatus();

返回 TCPEpollServer 的工作线程池的状态。Json 格式。

answerCallbackPoolStatus

virtual std::string answerCallbackPoolStatus();

返回 TCPEpollServer 处理 Server Push 应答的线程池状态。Json 格式。

encrpytionEnabled

inline bool encrpytionEnabled();

判断 TCP 服务器是否启动了加密。

enableEncryptor

inline bool enableEncryptor(const std::string& curve, const std::string& privateKey);

启用链接加密。

参数说明

  • const std::string& curve

    ECDH (椭圆曲线密钥交换) 所用曲线名称。

    可用值:

    • "secp256k1"
    • "secp256r1"
    • "secp224r1"
    • "secp192r1"
  • const std::string& privateKey

    服务器私钥(二进制数据)。

    注意

    该私钥为裸密钥,由 FPNN 框架内置工具 eccKeyMaker 生成。

enableForceEncryption

static void enableForceEncryption();

强制所有接口必须加密访问。

ipWhiteListEnabled

inline bool ipWhiteListEnabled();

判断白名单是否启用。

enableIPWhiteList

inline void enableIPWhiteList(bool enable = true);

启用或者禁用白名单。

addIPToWhiteList

inline bool addIPToWhiteList(const std::string& ip);

添加 IP 地址 (IP v4 或者 IP v6)到白名单中。

addSubnetToWhiteList

inline bool addSubnetToWhiteList(const std::string& ip, int subnetMaskBits);

添加 IP v4 网段到白名单中。

参数说明

  • const std::string& ip

    网段 IP。

  • int subnetMaskBits

    子网掩码位数。

removeIPFromWhiteList

inline void removeIPFromWhiteList(const std::string& ip);

将指定 IP 地址从白名单中删除。