采用 muduo 处理网络连接请求及事件回调,在单机环境中模拟启动两个客户端,通过Nginx的TCP长连接负载均衡器将连接均衡至两台启动的服务器中(详见下方/usr/local/nginx/conf/nginx.conf配置选项),Redis发布订阅对服务器之间的消息进行转发。
两台客户端连接nginx负载均衡器监听的8000端口,并进行通信

- 用户登录
- 用户注销
- 注册用户
- 单人聊天
- 添加好友
- 创建群组
- 加入群组
- 群组聊天
进入目录执行./build.sh即可编译完成。
- linux kernel version 4.4.0 (ubuntu 16.04 Server)
- gcc version 5.4.0
- cmake version 3.5.1
- boost version 1.58
- mysql version 5.7
- redis version 3.0.6
- muduo version 2.0.2
- json version 3.6.1
- nginx version 1.12.2
- hiredis version 1.0.2
muduo 编译依赖gcc、cmake、boost
# 安装cmake
sudo apt-get install cmake
# 安装boost
sudo apt-get install libboost-dev libboost-test-dev
# 三个非必须依赖库:curl、c-ares DNS、Google Protobuf
sudo apt-get install libcurl4-openssl-dev libc-ares-dev
sudo apt-get install protobuf-compiler libprotobuf-devmuduo 依赖安装完毕,编译./build.sh,若仍然缺少依赖,尝试:
sudo apt-get update
sudo apt-get install -y build-essential编译完毕后执行 muduo 编译安装,生成release-install-cpp11文件:
./build.sh installrelease-install-cpp11文件夹下有两个文件夹include和lib,先把编译生成include下的muduo文件夹移动至/usr/include/中,再把lib下四个库libmuduo_base.a libmuduo_http.a libmuduo_inspect.a libmuduo_net.a移动至/usr/local/lib/中:
mv muduo/ /usr/include/ # 把release-install-cpp11/include/*移动到/usr/include/
mv * /usr/local/lib/ # 把release-install-cpp libmuduo_base.a libmuduo_http.a libmuduo_inspect.a libmuduo_net.a四个库拷贝到/usr/local/lib/安装mysql 5.7及开发包:
apt-get update
apt-get install mysql-server # 安装最新版MySQL服务器
apt-get install libmysqlclient-dev # 安装开发包安装Redis服务器:
apt-get install redis-serverRedis初始化及服务启动操作可参考:link
Redis支持多种不同的客户端编程语言,如Java对应jedis、php对应phpredis、C++对应 hiredis。下面是安装hiredis的步骤,编译前先切换至root用户:
git clone https://github.com/redis/hiredis
cd hiredis
make
make install
ldconfig /usr/local/lib # 拷贝生成的动态库至/usr/local/lib编译nginx前,需安装依赖环境pcre、zlib、openssl。PCRE库支持正则表达式。若在配置文件nginx.conf中使用了正则表达式,在编译nginx时就必须把PCRE库编译进nginx。安装PCRE:
sudo apt-get install libpcre3 libpcre3-dev zlib库用于对HTTP包的内容做gzip格式的压缩,若在nginx.conf中配置了gzip on,并指定对于某些类型(content-type)的HTTP响应使用gzip来进行压缩以减少网络传输量,则在编译时就必须把zlib编译进nginx。安装zlib:
sudo apt-get install zlib1g-dev若服务器不只是要支持HTTP,还需要在更安全的SSL协议上传输HTTP,则需有OpenSSL。另外,若想使用MD5、SHA1等散列函数,则也需要安装它。安装OpenSSL:
sudo apt-get install openssl libssl-dev 安装上述依赖环境pcre、zlib、openssl后,将details内的 nginx-1.12.2.tar.gz 在指定目录解压:
tar -axvf nginx-1.12.2.tar.gz在服务器快速集群环境搭建中,需要一个能拿来即用的负载均衡器,nginx在1.9版本之前,只支 持HTTP协议web服务器的负载均衡,从1.9版本开始后,nginx开始支持TCP的长连接负载均衡,但nginx默认并没有编译TCP负载均衡模块,编写它时,需要加入--with-stream参数来激活这个模块。接下来编译需向系统路径拷贝,切换至root编译:
cd nginx-1.12.2/
./configure --with-stream
make && make install编译完成后,默认安装在了/usr/local/nginx目录。
启动nginx服务:
cd /usr/local/nginx/sbin
./nginx停止nginx服务:
cd /usr/local/nginx/sbin
./nginx -s stop配置配置文件nginx.conf(配置文件所在路径:/usr/local/nginx/conf/nginx.conf),配置如下:
# nginx tcp loadbalance config
stream {
# MyServer负载均衡模块
upstream MyServer {
server 127.0.0.1:6000 weight=1 max_fails=3 fail_timeout=30s;
server 127.0.0.1:6002 weight=1 max_fails=3 fail_timeout=30s;
}
server {
proxy_connect_timeout 1s;
# proxy_timeout 3s;
listen 8000;
proxy_pass MyServer; # 指定8000端口连入后发送至MyServer负载均衡模块中
tcp_nodelay on;
}
}配置完成后,./nginx -s reload平滑重启。

