Tars快速入门——Hello World

Tars基础概念

这里主要介绍APP/Server/Servant的概念。

  • App:应用名,标识一组服务的一个小集合, 开发者可以根据需要自己定义, 通常表示实现某个业务系统名称。

    • 在Tars系统中,应用名必须唯一, 例如:TestApp
    • 通常应用名对应代码中的某个名字空间
  • Server:服务名,提供服务的进程名称。

    • 一个Server必须属于某个App, App下的Server名称都具备唯一性
    • 一个Server代表一个独立的程序, 绑定至少一个ip, 实现一组相关的接口
    • 一般命名为:XXServer,例如LogServer,TimerServer等,它会在TARS web平台上左边服务树上展示
  • Servant:服务提供者, 提供了一个多个具体的接口(interface), 提供给客户端调用

    • Servant对应服务代码中一个类, 继承于tars协议文件中的interface(内涵多个具体的函数), 由业务开发者实现
    • 一个Servant必须属于某个Server, Server下的Servant名称都具备唯一性
    • Servant需要一个名称, 比如: HelloObj, 当提供给客户端使用的, 全称是: App.Server.Servant, 比如: Test.HelloServer.HelloObj
    • 客户端调用Server时, 只需要指定Servant的名称即可完成远程通信(根据部署方式会有区别)

这三个是基础概念,在动手之前要先有个认识,更多基础概念的内容,可以参考文档:https://tarscloud.github.io/TarsDocs/base/tars-concept.html。

动手实现Hello World

服务端
  1. web端配置

这个可以先做,也可以在开发完服务程序代码后再做,建议先做。步骤如下:

  • 进入Tars管理界面,点击运维管理
  • 根据页面内容,设定应用名、服务名称、Obj等(这里设定的名称要与后续开发代码时设定的一致,否则部署不成功),如下图。

在这里插入图片描述

  • 创建完成,可在服务部署页面的右侧服务树看到。
  1. 开发代码

因为需要向安装目录/usr/local/tars/等目录下写入,所以需要root权限。步骤如下:

  • web配置时已经确定了各组件的名称:App: TestApp, Server: HelloServer, Servant: Hello
  • 使用脚本生成服务框架代码:/usr/local/tars/cpp/script/cmake_tars_server.sh TestApp HelloServer Hello,生成相关的h和cpp文件,包含了最基本的服务框架和默认测试接口实现。
  • 编译:cd build; cmake ..; make; make HelloServer-tar,完成编译
  • 注意,自动生成的代码中,服务只有test接口,且直接返回0。测试时不直观。下面修改接口扩展代码。
  • 首先在Hello.tars中增加int testHello(string sReq, out string sRsp);,如下:
module TestApp
{

interface Hello
{
    int test();
    int testHello(string sReq, out string sRsp);
};

}; 
  • 更新h文件:/usr/local/tars/cpp/tools/tars2cpp Hello.tars
  • 修改Servant的接口实现类HelloImp:
// h
virtual int testHello(const std::string &sReq, std::string &sRsp, tars::TarsCurrentPtr current);
//cpp
int HelloImp::testHello(const std::string &sReq, std::string &sRsp, tars::TarsCurrentPtr current)
{
    TLOGDEBUG("HelloImp::testHellosReq:"<<sReq<<endl);
    sRsp = sReq;
    return 0;
}
  • 重新编译即可:make clean; make; make HelloServer-tar,生成HelloServer.tgz发布包。
  1. 发布服务
  • 在web界面选中服务,点击发布管理
  • 选中节点,点击发布选中节点
  • 上传刚编译的tgz包,根据提示操作即可
  • 发布完成,可看到状态为Active。
客户端开发

对刚开发的服务端进行release编译,在build下执行make HelloServer-release,可生成开发客户端时使用的头文件。

上述是文档里的,笔者实际测试时报错,缺少依赖的文件,这个还没研究,读者朋友如果知晓请指出。

笔者就直接在HelloServer目录下建立了软链接,链接到Hello.tars和Hello.h两个文件,其实客户端的编译就依赖这两个文件。

  • 建立客户端目录HelloClient
  • 编写main.cpp,这里使用同步请求方式,内容如下:
#include <iostream>
#include "servant/Communicator.h"
#include "Hello.h"

using namespace std;
using namespace TestApp;
using namespace tars;

int main(int argc,char ** argv)
{
    Communicator comm;// 通信器

    try
    {
        HelloPrx prx;// 代理
        comm.stringToProxy("TestApp.HelloServer.HelloObj@tcp -h 10.120.129.226 -p 20001" , prx); // 指定ip:port,不必发布到Tars框架即可测试

        try
        {
            string sReq("hello world");
            string sRsp("");

            int iRet = prx->testHello(sReq, sRsp);
            cout<<"iRet:"<<iRet<<" sReq:"<<sReq<<" sRsp:"<<sRsp<<endl;

        }
        catch(exception &ex)
        {
            cerr << "ex:" << ex.what() << endl;
        }
        catch(...)
        {
            cerr << "unknown exception." << endl;
        }
    }
    catch(exception& e)
    {
        cerr << "exception:" << e.what() << endl;
    }
    catch (...)
    {
        cerr << "unknown exception." << endl;
    }

    return 0;
}
  • 编写makefile,如下:
#-----------------------------------------------------------------------
APP         :=TestApp
TARGET      :=TestHelloClient
CONFIG      :=
STRIP_FLAG  := N

INCLUDE     += -I/home/yang/TestApp/HelloServer/ # 服务端生成的依赖目录,根据自己的目录修改
LIB         +=
#-----------------------------------------------------------------------
include /usr/local/tars/cpp/makefile/makefile.tars
#-----------------------------------------------------------------------
  • 编译出可执行文件:make
  • 运行测试即可(不必在部署Tars的服务器上运行)

在这里插入图片描述

小结

服务端和客户端的开发都有一定的步骤可以遵循,还提供了大量的脚本生成文件,这也减少了出错的机率。

虽然是快速入门,但是一些基础概念还是要理解清楚。第一遍读一下,整个demo跑下来了再重读一下会理解更多一点。

其实,还有许多重要的东西没有涉及,如tars文件编写规范、通信器的设计、客户端代理、异步通信模式等,会在后面的学习中加深理解。

另,整个demo的代码可以在github的example中找到,但cmake的内容要修改一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值