/********************************************Muduo********************************************************/
是不是又遇到安装Muduo库不知道怎么安装的问题了?我来助你!
Muduo库是什么?
Muduo 是一个基于 Reactor 模式、高性能、线程安全的现代 C++ 网络库,由陈硕(@chenshuo)开发并开源。
Muduo 是 Linux 下 C++ 高性能网络编程领域的一个标杆库。其核心价值在于提供了一个清晰、高效、经过验证的多线程 Reactor 模型实现 (one loop per thread
)。它极大地简化了开发高性能、线程安全的 TCP 网络服务的复杂度。如果你在 Linux 上使用 C++ 开发需要高性能网络通信的后端服务,Muduo 是一个非常值得深入研究和使用的优秀基础库。同时,它的源码本身也是学习高质量 C++ 编程和网络编程设计的宝贵资源。
陈硕的著作《Linux 多线程服务端编程:使用 muduo C++ 网络库》 是深入理解 Muduo 设计理念、C++ 多线程编程和网络编程的权威指南
注意!这玩意就是安装在Linux下的,因为它深度依赖epoll
Muduo库安装指南
目录
1-拷贝muduo的源码压缩包muduo-master.zip到Linux系统下
3-输入./build.sh install命令进行muduo库安装
对你有所帮助的话,请留下点赞、关注、投币(虽然没有)再走吧~
安装包获取路径
1、https://github.com/chenshuo/muduo 从GitHub上进行获取资源进行下载
2、链接:https://pan.baidu.com/s/1Rqrnz8NY6UOiFemYQv-63Q 提取码:8nio (较为推荐)
注意!muduo库是基于boost开发的,所以需要先在Linux平台上安装boost库
这也就意味着你得先安装boost,不要着急,我这自有法宝~
Linux——Boost库源码编译安装(包教包会)-优快云博客
1-拷贝muduo的源码压缩包muduo-master.zip到Linux系统下
同样的不知道怎么拷贝到Linux系统下,看看我安装Boost库的博客,通俗易懂
root@****-virtual-machine:/home/****/package# ls
muduo-master.zip
root@****-virtual-machine:/home/****/package# unzip muduo-master.zip
这里我将文件放在package文件夹下
解压一下,然后进入目录
root@****-virtual-machine:/home/****/package# ls
muduo-master muduo-master.zip
root@****-virtual-machine:/home/****/package# cd muduo-master
root@****-virtual-machine:/home/****/package/muduo-master# ls
armlinux.diff build.sh clang.diff Doxyfile License muduo README
backport.diff ChangeLog CMakeLists.txt examples MacOSX.diff premake4.lua TODO
为了缩短耗时,我们可以将如下代码注释掉
root@****-virtual-machine:/home/****/package/muduo-master#vim CMakeLists.txt
然后即可保存退出
2-运行build.sh源码编译构建程序
注意:muduo是用cmake来构建的,需要先安装cmake,ubuntu下直接sudo apt-get install cmake就可以
注意:muduo网络库使用CMake作为其构建系统,因此在使用前需要确保系统已安装CMake构建工具。在Ubuntu/Debian等基于APT的Linux发行版中,可以通过以下步骤完成安装:
- 打开终端(Ctrl+Alt+T)
- 执行安装命令:
sudo apt-get update sudo apt-get install cmake
- 验证安装是否成功:
正常安装后会显示CMake版本信息,如"cmake version 3.16.3"cmake --version
对于其他Linux发行版:
- Fedora/CentOS/RHEL:
sudo yum install cmake
或sudo dnf install cmake
- Arch Linux:
sudo pacman -S cmake
CMake版本要求:
- 建议使用CMake 3.5及以上版本
- 某些新特性可能需要CMake 3.9+支持
安装完成后,即可
root@****-virtual-machine:/home/****/package/muduo-master# ./build.sh
最后下面显示[100%]即代表成功了!
3-输入./build.sh install命令进行muduo库安装
root@****-virtual-machine:/home/****/package/muduo-master# ./build.sh install
等待一段时间以后我们执行如下操作
root@****-virtual-machine:/home/****/package# ls
build muduo-master muduo-master.zip
root@****-virtual-machine:/home/****/package# cd build/
root@****-virtual-machine:/home/****/package/build# ls
release-cpp11 release-install-cpp11
root@****-virtual-machine:/home/****/package/build# cd release-install-cpp11/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# ls
include lib
由于程序在运行时需要通过系统路径(如Linux的/usr/include
或/usr/lib
目录,Windows的C:\Program Files
或C:\Windows\System32
目录)来查找相关的头文件和数据库链接库,而当前文件(如libexample.so
或example.h
)尚未被放置在系统路径中,这会导致编译或运行时出现"未找到文件"的错误。,需要将其移动至系统路径才能正常使用。
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# ls
include lib
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# cd include/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/include# ls
muduo
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/include# mv muduo/ /usr/include/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/include# cd ..
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# ls
include lib
root@****-virtual-machine:/home/****/package/build/release-install-cpp11# cd lib/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/lib# ls
libmuduo_base.a libmuduo_http.a libmuduo_inspect.a libmuduo_net.a
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/lib# mv * /usr/local/lib/
root@****-virtual-machine:/home/****/package/build/release-install-cpp11/lib#
操作流程至此基本完成。请严格遵循上述步骤执行,无需额外询问。特别建议切换至root用户以获得最高权限。
- 执行前请确认当前用户权限
- 建议通过
sudo -i
或su -
命令切换至root用户 - 若无法获取root权限,请确保当前用户具有sudo权限
验证
main.cpp
#include <muduo/net/TcpServer.h>
#include <muduo/base/Logging.h>
#include <boost/bind.hpp>
#include <muduo/net/EventLoop.h>
// 使用muduo开发回显服务器
class 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::TcpServer server_;
};
EchoServer::EchoServer(muduo::net::EventLoop* loop,
const muduo::net::InetAddress& listenAddr)
: server_(loop, listenAddr, "EchoServer")
{
server_.setConnectionCallback(
boost::bind(&EchoServer::onConnection, this, _1));
server_.setMessageCallback(
boost::bind(&EchoServer::onMessage, this, _1, _2, _3));
}
void EchoServer::start()
{
server_.start();
}
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);
}
int main()
{
LOG_INFO << "pid = " << getpid();
muduo::net::EventLoop loop;
muduo::net::InetAddress listenAddr(8888);
EchoServer server(&loop, listenAddr);
server.start();
loop.loop();
}
直接拷贝就行,然后对其进行编译,运行
g++ main.cpp -lmuduo_net -lmuduo_base -lpthread -std=c++11
root@****-virtual-machine:/home/****/code# ./a.out
20190404 08:00:15.254790Z 42660 INFO pid = 42660 - main.cpp:61
等待客户端连接时,可开启新终端窗口,使用netcat命令模拟客户端来测试echo服务器的功能。
tony@****-virtual-machine:~$ echo "hello world" | nc localhost 8888
hello world
客户端打印类似如下内容就是成功了
root@****-virtual-machine:/home/****/code# ./a.out
20190404 08:00:15.254790Z 42660 INFO pid = 42660 - main.cpp:61
20190404 08:00:59.438626Z 42660 INFO TcpServer::newConnection [EchoServer] - new connection [EchoServer-0.0.0.0:8888#1] from 127.0.0.1:33480 - TcpServer.cc:80
20190404 08:00:59.438707Z 42660 INFO EchoServer - 127.0.0.1:33480 -> 127.0.0.1:8888 is UP - main.cpp:42
20190404 08:00:59.438812Z 42660 INFO EchoServer-0.0.0.0:8888#1 echo 12 bytes, data received at 1554364859.438723 - main.cpp:53
好啦,到此为止你就可以去进行网络开发啦
对你有所帮助的话,请留下点赞、关注、投币(虽然没有)再走吧~
对了,如果想了解更多相关内容,可以:
- 查看我的往期文章Linux——Boost库源码编译安装(包教包会)-优快云博客C++实现简易连接池(详细版)上-优快云博客
- 在评论区留下你的想法
- 分享给更多需要的朋友
期待下次还能继续为你带来有价值的内容!我们下期再见~
/********************************************Muduo*********************************************************/
/********************************************continue*******************************************************/