有域名如何做免费网站,房地产市场规模,东营 网站建设,汕头网站公司前言#xff1a;学习一个基于C集群聊天服务器的项目#xff0c;记录学习的内容和学习的过程。
1.项目介绍
在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。
2.技术栈
Json序列…前言学习一个基于C集群聊天服务器的项目记录学习的内容和学习的过程。
1.项目介绍
在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。
2.技术栈
Json序列化和反序列化muduo网络库开发nginx源码编译安装和环境部署nginx的tcp负载均衡器配置redis缓存服务器编程实践基于发布-订阅的服务器中间件redis消息队列编程实践MySQL数据库编程CMake构建编译环境Github托管项目
3.项目需求
客户端新用户注册客户端用户登录添加好友和添加群组好友聊天群组聊天离线消息nginx配置tcp负载均衡集群聊天系统支持客户端跨服务器通信
4.项目目标
掌握服务器的网络I/O模块业务模块数据模块分层的设计思想掌握C muduo网络库的编程以及实现原理掌握Json的编程应用掌握nginx配置部署tcp负载均衡器的应用以及原理掌握服务器中间件的应用场景和基于发布-订阅的redis编程实践以及应用原理掌握CMake构建自动化编译环境掌握Github管理项目
5.开发环境
ubuntu linux环境安装Json开发库安装boost cmake muduo网络库安装redis环境安装mysql数据库环境安装nginx
5.1安装Linux操作系统
可以选用Centos或者Ubuntu,本人使用Ubuntu 18.04可以使用以下命令查看自己的版本号
lsb_release -a使用是使用虚拟机安装Linux推荐核心数4和内存4G因为安装了接下来的工具内存就很紧张。
5.2配置远程开发环境
当我们使用一台新安装的Linux系统时需要开启sshd服务以确保我们能够远程操作该系统。
首先安装并开启ssh
sudo apt-get update //更新源
sudo apt-get install openssh-server //安装
netstat -tanp | grep sshd //查看是否开启sshd服务注意如果不能连上该服务器可以查看下防火墙是否开启本人曾租用的服务器上遇到过
5.3安装muduo网络库
因为muduo库是基于Boost库开发的所以先安装Boost库。
5.3.1安装Booost库
下载Boost库 到下载的目录解压Boost库
tar xzvf boost_1_69_0.tar.gz进入解压后的目录
cd /boost_1_69_0/获取所需的库主要的是boost::regex支持的icu
sudo apt-get update
sudo apt-get install build-essential g python-dev autotools-dev libicu-dev build-essential libbz2-dev libboost-all-devBoost引导程序设置
./bootstrap.sh --prefix/usr/执行比较耗时
./b2安装
sudo ./b2 install测试Boost是否安装成功
#include iostream
#include boost/bind.hpp
#include string
using namespace std;class Hello{public:void say(string name){cout name Nice to meet you! endl;}
};int main()
{Hello h;auto funcboost::bind(Hello::say,h,Hey boy );func();return 0;
}g编译后运行后结果如下则安装成功
5.3.2安装muduo库
一个基于reactor反应堆模型的多线程C网络库。有个这个库我们不需要自己写epoll和线程池了因为muduo已经封装好了它将IO模块和业务模块分开我们主要考虑业务模块IO模块完全由muduo库完成。
解压muduo库
unzip muduo-master.zip进入该目录
cd muduo-master.zip修改CMakeLists.txt第13行 安装cmake然后编译安装muduo库
sudo apt-get install cmake编译
./build.sh安装muduo库
./build.sh install把inlcude头文件和lib库文件目录下的文件拷贝到系统目录下
cd ../build/release-install-cpp11/include/sudo mv ./muduo/ /usr/include/cd ../lib/sudo mv * /usr/local/lib/测试安装成功 新建一个Muduo_text.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 Muduo_text.cpp -lmuduo_net -lmuduo_base -lpthread -stdc11新建一个终端输入
echo Hello world|nc localhost 8888结果如下则成功
5.6安装Json
简介Json是一种轻量级的数据交换格式也叫数据序列化方式。Json采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 Json 成为理想的数据交换语言。 易于人阅读和编写同时也易于机器解析和生成并有效地提升网络传输效率。 它只有一个hpp文件需要时直接include就行无需安装
#include json.hpp
using json nlohmann::json;5.7安装Redis
安装Redis可参考这篇博主的文章Ubuntu中安装mysql和redis并配置远程连接
5.8安装Mysql
在Ubuntu中默认情况下只有最新版本的MySQL包含在APT软件包存储库中,要安装它只需更新服务器上的包索引并安装默认包apt-get。
#命令1
sudo apt-get update
#命令2
sudo apt-get install mysql-server
## 安装MySQL编程开发包,这是ubuntu的包名其它系统自行搜索
sudo apt-get install libmysqlclient-dev ubuntu18.04默认安装mysql5.7ubuntu20及以上默认安装8.0版本。
查看状态
/etc/init.d/mysql status
##或者使用5.7第一次可能不能用
systemctl status mysql.service第一次登录需要sudo然后修改密码本文修改为123456
sudo mysql
ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password BY 123456;初始化mysql
mysql_secure_installation登录
mysql -u root -p查看是否安装成功
sudo netstat -tanp出现mysqld说明配置成功
总结
本文简单介绍了该项目的内容、技术栈、需求和目标然后着重介绍了环境的安装配置有个别目前用不上到后面再安装。希望本次环境安装能给大家一点帮主。 文章转载自: http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn http://www.morning.rxnr.cn.gov.cn.rxnr.cn http://www.morning.kmwbq.cn.gov.cn.kmwbq.cn http://www.morning.cwlxs.cn.gov.cn.cwlxs.cn http://www.morning.zxznh.cn.gov.cn.zxznh.cn http://www.morning.jkzjs.cn.gov.cn.jkzjs.cn http://www.morning.bsqth.cn.gov.cn.bsqth.cn http://www.morning.hbhnh.cn.gov.cn.hbhnh.cn http://www.morning.rdlong.com.gov.cn.rdlong.com http://www.morning.kkjlz.cn.gov.cn.kkjlz.cn http://www.morning.qcslh.cn.gov.cn.qcslh.cn http://www.morning.zpdjh.cn.gov.cn.zpdjh.cn http://www.morning.cjxqx.cn.gov.cn.cjxqx.cn http://www.morning.jcffp.cn.gov.cn.jcffp.cn http://www.morning.clgbb.cn.gov.cn.clgbb.cn http://www.morning.qbwtb.cn.gov.cn.qbwtb.cn http://www.morning.dbrpl.cn.gov.cn.dbrpl.cn http://www.morning.qsxxl.cn.gov.cn.qsxxl.cn http://www.morning.bpmtz.cn.gov.cn.bpmtz.cn http://www.morning.hhkzl.cn.gov.cn.hhkzl.cn http://www.morning.dongyinet.cn.gov.cn.dongyinet.cn http://www.morning.kpbgvaf.cn.gov.cn.kpbgvaf.cn http://www.morning.dzdtj.cn.gov.cn.dzdtj.cn http://www.morning.yckrm.cn.gov.cn.yckrm.cn http://www.morning.crtgd.cn.gov.cn.crtgd.cn http://www.morning.dblgm.cn.gov.cn.dblgm.cn http://www.morning.trsfm.cn.gov.cn.trsfm.cn http://www.morning.wqpsf.cn.gov.cn.wqpsf.cn http://www.morning.gpsr.cn.gov.cn.gpsr.cn http://www.morning.fpkdd.cn.gov.cn.fpkdd.cn http://www.morning.fgrcd.cn.gov.cn.fgrcd.cn http://www.morning.czzpm.cn.gov.cn.czzpm.cn http://www.morning.wypyl.cn.gov.cn.wypyl.cn http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn http://www.morning.lfjmp.cn.gov.cn.lfjmp.cn http://www.morning.wklmj.cn.gov.cn.wklmj.cn http://www.morning.lnbcg.cn.gov.cn.lnbcg.cn http://www.morning.ttdbr.cn.gov.cn.ttdbr.cn http://www.morning.lrzst.cn.gov.cn.lrzst.cn http://www.morning.qklff.cn.gov.cn.qklff.cn http://www.morning.wqwbj.cn.gov.cn.wqwbj.cn http://www.morning.rnnts.cn.gov.cn.rnnts.cn http://www.morning.ljygq.cn.gov.cn.ljygq.cn http://www.morning.gqksd.cn.gov.cn.gqksd.cn http://www.morning.wjrtg.cn.gov.cn.wjrtg.cn http://www.morning.demoux.com.gov.cn.demoux.com http://www.morning.skrxp.cn.gov.cn.skrxp.cn http://www.morning.yqqxj26.cn.gov.cn.yqqxj26.cn http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn http://www.morning.dhnqt.cn.gov.cn.dhnqt.cn http://www.morning.cykqb.cn.gov.cn.cykqb.cn http://www.morning.mmqng.cn.gov.cn.mmqng.cn http://www.morning.bnlch.cn.gov.cn.bnlch.cn http://www.morning.mwnch.cn.gov.cn.mwnch.cn http://www.morning.zlhzd.cn.gov.cn.zlhzd.cn http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn http://www.morning.nfmlt.cn.gov.cn.nfmlt.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.lzph.cn.gov.cn.lzph.cn http://www.morning.djpgc.cn.gov.cn.djpgc.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.drcnf.cn.gov.cn.drcnf.cn http://www.morning.wgtnz.cn.gov.cn.wgtnz.cn http://www.morning.ssrjt.cn.gov.cn.ssrjt.cn http://www.morning.qtsks.cn.gov.cn.qtsks.cn http://www.morning.jtwck.cn.gov.cn.jtwck.cn http://www.morning.xmbhc.cn.gov.cn.xmbhc.cn http://www.morning.rbkgp.cn.gov.cn.rbkgp.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.bnzjx.cn.gov.cn.bnzjx.cn http://www.morning.ywxln.cn.gov.cn.ywxln.cn http://www.morning.fyxtn.cn.gov.cn.fyxtn.cn http://www.morning.jfqqs.cn.gov.cn.jfqqs.cn http://www.morning.pwdmz.cn.gov.cn.pwdmz.cn http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.fqklt.cn.gov.cn.fqklt.cn http://www.morning.weiwt.com.gov.cn.weiwt.com http://www.morning.mjzcp.cn.gov.cn.mjzcp.cn http://www.morning.fgrcd.cn.gov.cn.fgrcd.cn http://www.morning.wwsgl.com.gov.cn.wwsgl.com