采用 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-dev
muduo 依赖安装完毕,编译./build.sh
,若仍然缺少依赖,尝试:
sudo apt-get update
sudo apt-get install -y build-essential
编译完毕后执行 muduo 编译安装,生成release-install-cpp11
文件:
./build.sh install
release-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-server
Redis
初始化及服务启动操作可参考: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
平滑重启。