Skip to content

7 Framework篇:NodeServer

Alex edited this page Dec 27, 2018 · 8 revisions

7 Framework篇:NodeServer

获取源码

执行./run.sh,编译出两个server。HelloServer(原tar-demo-improve)和NodeServer

上面代码实现了最基本的heartbeat功能,即HelloServer定时向NodeServer发送心跳消息

实现发送心跳消息原理很简单:HelloServer中有一个client定时发异步请求到NodeServer,因此代码修改步骤如下:

  • 定义NodeF.h,实现ServerFProxy和ServerF,前者是HelloServer的client需要用到,后者是NodeServer的ServerImp需要用到

  • 实现Application::initializeClient(),完成_communicator初始化,增加TarsNodeFHelper,完成具体调用功能

  • 增加AdminServant,其Adapter名称为AdminAdapter,这是因为TarsNodeFHelper中adapter名字必须为“AdminAdapter”才会去发起远程过程调用

  • 增加ServerImp,完成NodeServer建造

先启动NodeServer(./NodeServer),再另外开一个窗口启动HelloServer(./HelloServer),过一会儿就会在NodeServer看到来自HelloServer的心跳请求。

7.1 通过NodeServer启动HelloServer

获取源码

改动点:

  • 定义新接口Node.h, NodeImp通过继承其中的Node类,实现了startServer方法

  • 新增NodeServer-start.sh和NodeServer-execute.sh,startServer方法通过执行NodeServer-start.sh脚本启动HelloServer

  • 改动Application类,使其可以包含两个Imp(ServerImp和NodeImp),这块比较挫,后面再改进

  • 修改ServantHandle::handleRequest方法,修复小bug,协程模式在客户端主动关闭时候,不要再继续调用handleRecvData方法

  • 增加tar-client-NodeServer客户端,用来发送命令给NodeServer

请确保下载下来的NodeServer-start.sh和NodeServer-execute.sh有755的权限(chmod 755 * .sh)

如何利用NodeServer启动HelloServer:

  • 执行./run.sh,生成HelloServer、NodeServer、tar-client-NodeServer

  • 执行./NodeServer

  • 另外开一个窗口,执行./tar-client-NodeServer

  • 执行ps -ef | grep HelloServer, 能看到HelloServer的进程已经存在

总结下现在HelloServer与NodeServer的关系:

NodeServer-HelloServer

  • 红色箭头是第一个功能,HelloServer定时向NodeServer发送心跳

  • 紫色箭头是第二个功能,可以通过向NodeServer发送startServer命令来启动HelloServer,实质是通过执行脚本来启动HelloServer

7.2 使用Makefile重新组织源代码

获取源码

为了便于理解,Makefile里没有使用多少“高级”语法,同时为了跟官方代码组织结构看齐,这次索性把目录结构一并调整了,使其看起来比较接近https://github.com/TarsCloud/TarsCpp 中的结构了。

关于Makefile的简单说明:

  • 下载源码后,直接make,默认编译出所有的目标文件。如果只想编译一个目标文件,使用make "目标文件"(make HelloServer)即可。如果操作系统还没有安装make,要先安装

  • 如果要新增自己的目标文件,需要几个步骤:(1)设置源文件路径*_SRC,头文件路径*_INC,object文件*_OBJ (2)在“Build Target”中设置需要编译出的目标文件名称和依赖的object文件 (3)在“Build Object”中设置*_OBJ的编译条件。基本上按照已有的模板修改即可。