c++搭建集群聊天室:安装muduo网络库(代码片段)

看,未来 看,未来     2022-12-21     366

关键词:

资源下载

提取码: fid9

常规操作啦,前面两三篇都是环境搭建。
muduo网络库我就不多做介绍了,一个基于reactor反应堆模型的多线程C++网络库,陈硕大神的作品,不了解的小伙伴可以自行了解一下。

也可以去GitHub上自行下载。

muduo库是基于boost开发的,所以需要先在Linux平台上安装boost库,安装boost库的方法:搁这儿呢

此外,muduo的编译是通过CMAKE来执行的,所以我们还需要安装CMAKE。
安装命令就不用我多说了吧。。

CentOS下:

yum install cmake

确保那个压缩包已经在Linux下了吗?我们开始。


安装过程

unzip muduo-master.zip
cd muduo-master
./build.sh
./build.sh install

一气呵成,一马平川,畅通无阻。

但是呢,上面的install命令并没有把它们拷贝到系统路径下,导致我们每次编译程序都需要指定muduo库的头文件和库文件路径,很麻烦,所以我们选择直接把inlcude(头文件)和lib(库文件)目录下的文件拷贝到系统目录下:

现在,我们来对准一下目录,干点事情:

XXXXXXXX/build/release-install-cpp11/include

我不管你现在在哪个目录下,进入到这个目录下,我们开始:

mv muduo/ /usr/include/
cd ../lib
mv * /usr/local/lib/

拷贝完成以后使用muduo库编写C++网络程序,不用在指定头文件和lib库文件路径信息了,因为g++会自动从/usr/include和/usr/local/lib路径下寻找所需要的文件。


测试muduo是否安装成功

使用muduo库编写一个简单的echo回显服务器,测试muduo库是否可以正常使用,代码如下:

#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();

这里的编译要注意,使用了两个外库:
-lmuduo_net -lmuduo_base -lpthread

g++ muduo_test.cpp -o muduo_test -lmuduo_net -lmuduo_base -lpthread -std=c++11

运行结果:

一串时间 一个数字 INFO  pid = 还是那个数字 - muduo_test.cpp:61

等待客户端连接,可以打开一个新的shell命令行用netcat命令模拟客户端连接echo服务器进行功能测试,命令如下:

输入:echo "hello world" | nc localhost 8888

回显:hello world

客户端数据回显正确,看看服务器接日志信息打印如下:

时间 XXX INFO  pid = XXX - muduo_test.cpp:61
时间 XXX INFO  TcpServer::newConnection [EchoServer] - new connection [EchoServer-0.0.0.0:端口A一个#1] from 127.0.0.1:端口B一个 - TcpServer.cc:80
时间 XXX INFO  EchoServer - 127.0.0.1:端口B一个 -> 127.0.0.1:端口A一个 is UP - muduo_test.cpp:42
时间 XXX INFO  EchoServer-0.0.0.0:8888#1 echo 12 bytes, data received at 数字一串 - muduo_test.cpp:53

到此,muduo安装成功,能够正常进行C++网络程序开发!

c++搭建集群聊天室:muduo网络库(代码片段)

文章目录简介与建议网络服务器编程常用模型muduo的reactor模型muduo库网络编程示例cmake编译简介与建议muduo网络库的编程很容易,要实现基于muduo网络库的服务器和客户端程序,只需要简单的组合TcpServer和TcpClient就可以。所... 查看详情

c++搭建集群聊天室:muduo网络库(代码片段)

文章目录简介与建议网络服务器编程常用模型muduo的reactor模型muduo库网络编程示例cmake编译简介与建议muduo网络库的编程很容易,要实现基于muduo网络库的服务器和客户端程序,只需要简单的组合TcpServer和TcpClient就可以。所... 查看详情

c++搭建集群聊天室:网络层代码与业务层代码(登录注册)解耦(代码片段)

文章目录放码过去网络层代码业务层代码主函数CMake运行脚本放码过去多余的废话就不多说了,直接放码上来吧。网络层代码chatserver.hpp,位于include/server目录下、#ifndefCHATSERVER_H_#defineCHATSERVER_H_#include<muduo/net/TcpServer.h>... 查看详情

c++搭建集群聊天室:网络层代码与业务层代码(登录注册)解耦(代码片段)

文章目录放码过去网络层代码业务层代码主函数CMake运行脚本放码过去多余的废话就不多说了,直接放码上来吧。网络层代码chatserver.hpp,位于include/server目录下、#ifndefCHATSERVER_H_#defineCHATSERVER_H_#include<muduo/net/TcpServer.h>... 查看详情

c++搭建集群聊天室:安装boost库(代码片段)

项目说明没有在Windows下开发的打算,代码也是用vim直接干,所以本系列博客是基于Linux平台的开发。我用的是CentOS8,别的也可以,细微差别而已。全程root权限下去玩。不要被环境耽搁了,配个环境赶紧上车吧... 查看详情

c++搭建集群聊天室:安装boost库(代码片段)

项目说明没有在Windows下开发的打算,代码也是用vim直接干,所以本系列博客是基于Linux平台的开发。我用的是CentOS8,别的也可以,细微差别而已。全程root权限下去玩。不要被环境耽搁了,配个环境赶紧上车吧... 查看详情

c++搭建集群聊天室:登录与注册(代码片段)

前面准备了那么多,这里就直接是水到渠成了。该讲的前面都讲的差不多了,剩下还没讲的都在代码里面。不过由于文档Telnet一直是发送不了数据的状态,就一直没法进一步的测试,等后面写了客户端再说。chatser... 查看详情

c++搭建集群聊天室:登录与注册(代码片段)

前面准备了那么多,这里就直接是水到渠成了。该讲的前面都讲的差不多了,剩下还没讲的都在代码里面。不过由于文档Telnet一直是发送不了数据的状态,就一直没法进一步的测试,等后面写了客户端再说。chatser... 查看详情

c++搭建集群聊天室:数据库代码及用户模型代码封装(代码片段)

数据库模块db.hpp首先,在include/server目录下新增文件夹db,用于存放数据库相关文件。在db文件夹下新增文件:db.hpp#ifndefDB_H_#defineDB_H_#include<string>#include<mysql/mysql.h>#include<muduo/base/Logging.h&g 查看详情

c++搭建集群聊天室:数据库代码及用户模型代码封装(代码片段)

数据库模块db.hpp首先,在include/server目录下新增文件夹db,用于存放数据库相关文件。在db文件夹下新增文件:db.hpp#ifndefDB_H_#defineDB_H_#include<string>#include<mysql/mysql.h>#include<muduo/base/Logging.h&g 查看详情

c++搭建集群聊天室:配置远程代码编辑神器vscode(代码片段)

资源下载1、下载一个vscodeinsiders版本,没办法,稳定版还没覆盖到那个功能。下载好了安装起来,是一个绿色的,不是蓝色的,要注意。2、检查ssh是否已安装,命令:netstat-tanp看看有没有一个sshd服务... 查看详情

c++搭建集群聊天室:配置远程代码编辑神器vscode(代码片段)

资源下载1、下载一个vscodeinsiders版本,没办法,稳定版还没覆盖到那个功能。下载好了安装起来,是一个绿色的,不是蓝色的,要注意。2、检查ssh是否已安装,命令:netstat-tanp看看有没有一个sshd服务... 查看详情

c++搭建集群聊天室:mysql数据库配置及项目工程目录配置(代码片段)

安装MySQL如果是跟我一样使用CentOS8的话,那就自信点:CentOS三分钟快速安装MySQLmysql建表数据库叫chatUser字段名称字段类型字段说明约束idINT用户idPRIMARYKEY、AUTO_INCREMENTnameVARCHAR(50)用户名NOTNULL,UNIQUEpasswordVARCHAR(50)用户密码NOTN... 查看详情

c++搭建集群聊天室:mysql数据库配置及项目工程目录配置(代码片段)

安装MySQL如果是跟我一样使用CentOS8的话,那就自信点:CentOS三分钟快速安装MySQLmysql建表数据库叫chatUser字段名称字段类型字段说明约束idINT用户idPRIMARYKEY、AUTO_INCREMENTnameVARCHAR(50)用户名NOTNULL,UNIQUEpasswordVARCHAR(50)用户密码NOTN... 查看详情

c++搭建集群聊天室(十八):nginx+redis发布订阅升级项目为集群服务器(代码片段)

...中获取订阅的消息环境配置与基本知识C++搭建集群聊天室(十七):ngnix简介及tcp负载均衡配置Redis环境搭建与配置hiredis从安装到实操,一条龙服务redis事务处理机制,但当涉猎了解更多red 查看详情

c++搭建集群聊天室(十八):nginx+redis发布订阅升级项目为集群服务器(代码片段)

...中获取订阅的消息环境配置与基本知识C++搭建集群聊天室(十七):ngnix简介及tcp负载均衡配置Redis环境搭建与配置hiredis从安装到实操,一条龙服务redis事务处理机制,但当涉猎了解更多red 查看详情

c++搭建集群聊天室(十五):客户端(代码片段)

直接塞一个文件里面。client.cpp#include"json.hpp"#include<iostream>#include<thread>#include<string>#include<vector>#include<chrono>#include<ctime>#include<unordered 查看详情

c++搭建集群聊天室(十五):客户端(代码片段)

直接塞一个文件里面。client.cpp#include"json.hpp"#include<iostream>#include<thread>#include<string>#include<vector>#include<chrono>#include<ctime>#include<unordered 查看详情