tcp服务消费者(c++)
概述
此示例演示如何使用cpp_sdk编写tcp服务消费(invoker)程序,cpp_sdk提供简单易用的接口给客户调用,与服务端通信/响应通告等细节sdk内部都完现了,用户无需花时间在这些细节上,而是专注于自身业务逻辑。
示例源文件: cpp_sdk/sample_tcp_invk.cpp
编译命令:g++ -Wall -g -std=c++11 sample_tcp_invk.cpp -o sample_tcp_invk ../common/libhocomm.so libsdk_cppcloud.so 或者
make sample_tcp_invk
示例准备:先运行服务端cppcloud_serv,记下ip地址和端口。
示例代码
如下给出的是关键语句伪代码。
#include "client_c.hpp" // sdk主头文件
int main( int argc, char* argv[] )
{
// sdk初始化,传入自身服务名和所要连接的serv地址;
int ret = client_c::Init("TestInvk", "localhost:4800");
// 服务消费者初始化,传入要调用的服务名(regname)
ret = client_c::InitInvoker(invkName);
// 设置服务调用的一些参数(如超时时间)
client_c::SetRequestTimeout(10, "");
// sdk运行时以新开后台线程的方式运行
ret = client_c::Run(true);
string resp,req, line;
while (getline(std::cin, line)) // 测试运行时改变配置,app能实时得知变化
{
if (line == "q")
{
kill(0, SIGTERM);
break;
}
req = line; // string("{ \"cmd\": \"") + line + "\"}";
std::thread th(thread_func, req);
th.detach();
}
client_c::Destroy(); // 释放资源,和Init()对应。
return 0;
}
// 发送消息线程
void thread_func( const string& msg )
{
static int seqcount = 0;
string resp;
int seqidx = ++seqcount;
printf("%d. tcp request msg: %s\n", seqidx, msg.c_str());
// 发起调用
int ret = client_c::TcpAioRequest(resp, msg, "TestPrvd");
printf("%d. tcpAio response [%d]: %s\n", seqidx, ret, resp.c_str()); // 打印响应
}
启动运行
-
docker方式:
docker exec -it <container> sample_tcp_invk [servip:port]
必须已启动了CppCloudo容器,是容器id或name,最后的[servip:port]不写默认连接localhost:4800; -
手动方式:
前提是c++ sdk库(libsdk_cppcloud.so libhocomm.so)已正常编译过了
cd cpp_sdk;
make sample_tcp_invk
;
./sample_tcp_invk localhost:4800
演示结果
程序执行, 并输入了hello_ho
后续继续输入
要退出时输入q