简易的负载均衡服务器——springsnail

简易的负载均衡服务器——springsnail

《linux高性能服务器编程》作者开源的一款简易负载均衡服务器,整个项目代码1400多行,短小精悍,适合初学者学习与模仿。该项目能从所有逻辑服务器中选取负荷最小的一台来处理新的客户连接,并且使用了进程池,有限状态机,高效数据结构和统一事件源等书中提及的思路优化其性能,同时还细致地封装了每个函数和模块,使之更像一个完整的实际服务器项目。

参考博客:

《Linux高性能服务器》附带项目springsnil源码解析

Linux高性能服务器编程springsnail源码解析(c++负载均衡)

项目搭建与使用

项目源码下载:

git clone https://github.com/liu-jianhao/springsnail.git

下载下来之后发现,整个项目源码如下:

解释一下各个文件的内容与作用:

 

 

 

  1. config.xml:配置文件,指明服务器本身的地址及它所要连接的ip127.0.0.1:8080表明服务器的主机位置和端口(localhost),下面两个103.65.41.126和103.65.41.125分别指明服务器连接的ip。执行时使用命令./springsnail -f config.xml即可

  2. fdwrapper.h与fdwrapper.cpp:操作文件描述符fd的各种函数,具体会在源码解析中放出。

  3. log.h与log.cpp:日志函数,在程序运行过程中打印各种信息到文件和控制台中。

  4. mgr.h与mgr.cpp:处理网络连接和负载均衡的框架

  5. conn.h与conn.cpp:客户端类与函数

  6. processcool.h:进程池,是整个项目的动力。

  7. main.cpp:主函数,处理服务器的主要逻辑。

了解完项目源码分布之后,我们发现有Makefile文件,所以直接make即可生成可执行文件。可执行文件就是图中绿色的springsnail了。

有了可执行文件,下一步就是修改配置文件config.xml,将服务器连接到我们想连接的ip上去。

比如,我们想连接到网易云音乐,先nslookup一下域名的地址:

$ nslookup music.163.com

结果如下:

上面59.111.181.35,59.111.181.38,59.111.181.60就是域名的ip了,我们随便选两个添加到config.xml文件中去:

保存并退出,然后执行服务器程序:

$ ./springsnail -f config.xml

终端显示如下信息:

表明服务器已经成功与目标ip连接。

此时我们可以将这个服务器作为中转,向服务器发送数据。

首先另开终端,使用nc工具进行连接:

$ nc localhost 8080

/*nc(netcat)是一个功能强大的网络工具,如果并未安装请使用命令

$ yum install nc.x86_64

netcat不仅可以通过使用TCP或UDP协议的网络连接读写数据,同时还是一个功能强大的网络调试和探测工具,能够建立你需要的几乎所有类型的网络连接。*/

连接成功后服务端会显示:

这样的信息,此时在nc端模拟http报文,命令如下:

$ nc localhost 8080
GET /HTTP/1.1

发现nc端返回如下信息:

可以清晰的看出我们的访问被403 Forbidden了,说明网易并不允许这样的中转服务器的存在,服务端也有相应的反馈:

可以看到刚才我们的连接请求被中断了,服务端有"error"日志消息回应。

还可以使用这个服务器去访问其他网站,只需修改config.xml文件即可,会有许多不同的结果。

接下来将对整个项目的源码进行剖析,从框架到实现都会做上详细的注释。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章