Pistache源码分析 —— Peer类

2021-06-27  本文已影响0人  蟹蟹宁

Peer类是用于描述用户连接的。在Pistache 并发处理过程中指出,Pistache中,有一个专门的线程负责监听server-fd,并accept用户的连接产生client-fd,然后将client-fd派发给处理线程去监听、解析、处理和返回数据。而peer类就是用于描述用户连接的结构,每个用户连接对应于一个Peer对象。

下为Peer类的结构:

class Peer
{
public:
    friend class Transport;
    friend class Http::Handler;
    friend class Http::Timeout;

    ~Peer();

    static std::shared_ptr<Peer> Create(Fd fd, const Address& addr);
    static std::shared_ptr<Peer> CreateSSL(Fd fd, const Address& addr, void* ssl);

    const Address& address() const;
    const std::string& hostname();
    Fd fd() const;

    void* ssl() const;

    void putData(std::string name, std::shared_ptr<void> data);
    std::shared_ptr<void> getData(std::string name) const;
    std::shared_ptr<void> tryGetData(std::string name) const;

    Async::Promise<ssize_t> send(const RawBuffer& buffer, int flags = 0);
    size_t getID() const;

protected:
    Peer(Fd fd, const Address& addr, void* ssl);

private:
    void associateTransport(Transport* transport);
    Transport* transport() const;
    static size_t getUniqueId();

    Transport* transport_ = nullptr;
    Fd fd_                = -1;
    Address addr;

    std::string hostname_;
    std::unordered_map<std::string, std::shared_ptr<void>> data_;

    void* ssl_ = nullptr;
    const size_t id_;
};

成员变量

private

构造函数

protected:
  Peer::Peer(Fd fd, const Address& addr, void* ssl)
          : fd_(fd)
          , addr(addr)
          , ssl_(ssl)
          , id_(getUniqueId())
      { }

成员函数

private
public
Async::Promise<ssize_t> Peer::send(const RawBuffer& buffer, int flags)
    {
        return transport()->asyncWrite(fd_, buffer, flags);
    }

使用transport,实现了异步的向client-fd中写入数据,应该是用于response的,但是代码中并没有调用此接口,send的代码就是简单的调用而已。

上一篇下一篇

猜你喜欢

热点阅读