前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C++搭建集群聊天室(二):安装muduo网络库

C++搭建集群聊天室(二):安装muduo网络库

作者头像
看、未来
发布2021-09-18 11:45:18
1.3K0
发布2021-09-18 11:45:18
举报
文章被收录于专栏:CSDN搜“看,未来”

文章目录

资源下载

提取码: fid9

常规操作啦,前面两三篇都是环境搭建。

muduo网络库我就不多做介绍了,一个基于reactor反应堆模型的多线程C++网络库,陈硕大神的作品,不了解的小伙伴可以自行了解一下。

也可以去GitHub上自行下载。

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

此外,muduo的编译是通过CMAKE来执行的,所以我们还需要安装CMAKE。

安装命令就不用我多说了吧。。

CentOS下:

代码语言:javascript
复制
yum install cmake

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


安装过程

代码语言:javascript
复制
unzip muduo-master.zip
cd muduo-master
./build.sh
./build.sh install

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

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

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

代码语言:javascript
复制
XXXXXXXX/build/release-install-cpp11/include

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

代码语言:javascript
复制
mv muduo/ /usr/include/
cd ../lib
mv * /usr/local/lib/

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


测试muduo是否安装成功

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

代码语言:javascript
复制
#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

代码语言:javascript
复制
g++ muduo_test.cpp -o muduo_test -lmuduo_net -lmuduo_base -lpthread -std=c++11

运行结果:

代码语言:javascript
复制
一串时间 一个数字 INFO  pid = 还是那个数字 - muduo_test.cpp:61

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

代码语言:javascript
复制
输入:echo "hello world" | nc localhost 8888

回显:hello world

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

代码语言:javascript
复制
时间 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++网络程序开发!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/08/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 资源下载
  • 安装过程
  • 测试muduo是否安装成功
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档