其他分享
首页 > 其他分享> > 【sylar服务器】TcpServer网络连接管理

【sylar服务器】TcpServer网络连接管理

作者:互联网

目录

TcpServer

  1. 1、TcpServer
    1. 1.1、私有成员
    2. 1.2、sock连接处理
    3. 1.3、思考
    4. 1.4、致谢

[1]sylar服务器 https://github.com/sylar-yin/sylar

TcpServer

1、TcpServer

    /// 监听Socket数组
    std::vector<Socket::ptr> m_socks;
    /// 新连接的Socket工作的调度器
    IOManager* m_worker;
    IOManager* m_ioWorker;
    /// 服务器Socket接收连接的调度器
    IOManager* m_acceptWorker;
    /// 服务器名称
    std::string m_name;
    /// 服务器类型
    std::string m_type = "tcp";
    /// 服务是否停止
    bool m_isStop;
    bool m_ssl = false;
    TcpServerConf::ptr m_conf;

1.2、socket连接处理

作为tcp服务器连接,对socket的配置做相关封装,对于基本的bind,这里不展开(sylar对socket的socket的配置都做了类的封装)。我只对socket连接处理进行了解。

bool TcpServer::start() {
    if(!m_isStop) {
        return true;
    }
    m_isStop = false;
    for(auto& sock : m_socks) {
        m_acceptWorker->schedule(std::bind(&TcpServer::startAccept,
                    shared_from_this(), sock));
    }
    return true;
}

void TcpServer::startAccept(Socket::ptr sock) {
    while(!m_isStop) {
        Socket::ptr client = sock->accept();
        if(client) {
            client->setRecvTimeout(m_recvTimeout);
            m_ioWorker->schedule(std::bind(&TcpServer::handleClient,
                        shared_from_this(), client));
        } else {
            SYLAR_LOG_ERROR(g_logger) << "accept errno=" << errno
                << " errstr=" << strerror(errno);
        }
    }
}

1.3、思考

tcp这里对外部连接的处理并不是负责,但是对于我这种新手来说,也是很好的学习资料。

1.4、致谢

标签:监听,调度,TcpServer,网络连接,sylar,接字,连接
来源: https://www.cnblogs.com/wlm-198/p/12502915.html