杭州网站建设app,推广普通话手抄报模板可打印,ps做图游戏下载网站,wordpress注册登录修改1.muduo库简介
muduo是由Google大佬陈硕开发#xff0c;是一个基于非阻塞IO和事件驱动的现代C网络库#xff0c;原生支持one loop per thread这种IO模型#xff0c;该库只支持Linux系统#xff0c;网上大佬对其褒贬不一#xff0c;作为小白用来学习就无可厚非了。 git仓库…1.muduo库简介
muduo是由Google大佬陈硕开发是一个基于非阻塞IO和事件驱动的现代C网络库原生支持one loop per thread这种IO模型该库只支持Linux系统网上大佬对其褒贬不一作为小白用来学习就无可厚非了。 git仓库:https://github.com/chenshuo/muduo
2.准备事项
muduo采用Cmake为build system安装如下
$ sudo apt-get install cmakemuduo依赖于Boost安装如下
$ sudo apt-get install libboost-dev libboost-test-devcurl、c-ares DNS、Google Protobuf这3个库非必须安装如果安装了cmake会多编译一些示例安装如下
$ sudo apt-get install libcur14-openssl-dev libc-ares-dev
$ sudo apt-get install protobuf-compiler libprotobuf-dev3.编译
下载muduo-master解压后执行编译脚本
// 切换路径
$ cd muduo-master/
//编译muduo库默认release版生成build文件夹
$ ./build.sh -j2
// 将muduo头文件和库文件安装到release-install目录下的include和lib文件夹
$ ./build.sh install
// 将头文件拷贝到系统路径
$ cd build/release-install-cpp11/include/
$ cp -r muduo/ /usr/local/include/
// 将库文件拷贝到系统路径
$ cd build/release-install-cpp11/lib/
$ cp * /usr/local/lib/4.测试demo
EchoServer.h
#include muduo/net/TcpServer.h
#include muduo/base/Logging.hclass EchoServer
{public:EchoServer(muduo::net::EventLoop* loop,const muduo::net::InetAddress listenAddr);void start();private:void onConnection(const muduo::net::TcpConnectionPtr conn);void onMessage(const muduo::net::TcpConnectionPtr conn,muduo::net::Buffer* buf,muduo::Timestamp time);muduo::net::EventLoop* loop_;muduo::net::TcpServer server_;};EchoServer.cpp
#include EchoServer.h
#include boost/bind/bind.hppusing namespace boost::placeholders;EchoServer::EchoServer(muduo::net::EventLoop* loop,const muduo::net::InetAddress listenAddr):loop_(loop),server_(loop, listenAddr, EchoServer){server_.setConnectionCallback(boost::bind(EchoServer::onConnection, this, _1));server_.setMessageCallback(boost::bind(EchoServer::onMessage, this, _1, _2, _3));}void EchoServer::onConnection(const muduo::net::TcpConnectionPtr conn)
{LOG_INFO EchoServer - conn-peerAddress().toIpPort() - conn-localAddress().toIpPort() is (conn-connected()? UP : DOWN);
}void EchoServer::onMessage(const muduo::net::TcpConnectionPtr conn,muduo::net::Buffer* buf,muduo::Timestamp time)
{muduo::string msg(buf-retrieveAllAsString());LOG_INFO conn-name() echo - msg.size() bytes, data received at time.toString();conn-send(msg);
}void EchoServer::start()
{server_.start();
}test.cpp
#include EchoServer.h#include muduo/net/EventLoop.h
#include muduo/base/Logging.husing namespace muduo;
using namespace muduo::net;int main()
{LOG_INFO pid getpid();muduo::net::EventLoop loop;muduo::net::InetAddress listenAddr(2007);EchoServer server(loop,listenAddr);server.start();loop.loop();
}在编译的时候出现好多未定义的错误最后排查是因为编译的时候链接库的顺序有要求编译如下
$ g EchoServer.cpp test.cpp -o test -lmuduo_base -lmuduo_net -lpthread错误消息如下
5.测试
执行test.out程序启动服务端再通过终端模拟客户端建立连接在客户端发送消息会同时接收服务端回复的相同消息。