muduo网络库,初学

1 篇文章 0 订阅

环境,centos7虚拟机,visual studio2019远程开发
muduo网络库提供了两个主要的类
TcpServer:用于编写服务器
TcpClient:用于编写客户端
epoll + 线程池模型,把网络I/O代码和业务代码分开(用户的连接和断开,用户的可读写时间是我们需要关心的。)
TcpServer构造函数

TcpServer(EventLoop* loop, //事件循环
            const InetAddress& listenAddr, //封装好的类,绑定IP地址跟端口号
            const string& nameArg,//该server的名字
            Option option = kNoReusePort); //TCP协议的选项
#include<functional>
using namespace std;
using namespace muduo::net;
using namespace muduo;

class ChatServer {
public:
    ChatServer(EventLoop* loop,
        const InetAddress& listenAddr,
        const string& nameArg) : _server(loop, listenAddr, nameArg), _loop(loop) {
        //给服务器注册用户的连接断开回调
        _server.setConnectionCallback(bind(&ChatServer:: onConnection, this, _1));
        //给服务器注册用户的读写回调
        _server.setMessageCallback(bind(&ChatServer::onMessege, this, _1, _2, _3));
        //设置服务器端的线程数量,一个I/O线程,三个工作线程
        _server.setThreadNum(4);
    }

    //开启事件循环
    void start() {
        _server.start();
    }
private:
    //专门处理用户的连接和断开
    void onConnection(const TcpConnectionPtr& conn) {
        if (conn->connected()) {
            cout << conn->peerAddress().toIpPort() << "->" << conn->localAddress().toIpPort() << endl;
            //_loop->quit();
        }
        else
        {
            conn->shutdown(); //close(fd)
            cout << "offline" << endl;
        }
        
    }
    //专门处理用户的读写事件
    void onMessege(const TcpConnectionPtr& conn,//连接
        Buffer* buffer, //缓冲区
        Timestamp time ) //接收到信息的时间信息
    {
        string buf = buffer->retrieveAllAsString();
        cout << "recv data:" << buf << "time: " << time.toString() << endl;
        conn->send(buf);
    }
    TcpServer _server;
    EventLoop* _loop;
};

int main()
{
    EventLoop loop;
    InetAddress addr("127.0.0.1", 6000);
    ChatServer server(&loop, addr, "chatserver");
    server.start(); //listenfd epoll_ctl->epoll
    loop.loop(); //epoll_wait,已阻塞方式等待用户的连接读写操作。
    return 0;
}

事实上,使用muduo网络库我们不用过多去关注连接的过程,只需要关注onConnection和onMessege这两个回调函数,其他的代码几乎是写死的,通过这个简单的测试可以启动一个回声服务器
在这里插入图片描述
一个基本的基于muduo库的服务器就建好了

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值