C++搭建集群聊天室:安装muduo网络库
Posted 看,未来
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++搭建集群聊天室:安装muduo网络库相关的知识,希望对你有一定的参考价值。
资源下载
常规操作啦,前面两三篇都是环境搭建。
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网络库的主要内容,如果未能解决你的问题,请参考以下文章
C++搭建集群聊天室:网络层代码与业务层代码(登录注册)解耦