使用RCF-2200 c++源码实现一个服务端多个客户端要求必须是服务端下发任务给客户端。给出实现代码
以下是使用RCF-2.2.0.0 C++源码实现的一个简单的服务端和多个客户端的示例代码:
服务端代码(server.cpp):
#include <iostream>
#include <RCF/RCF.hpp>
class Task
{
public:
RCF::RcfSessionPtr mSession;
std::string mTaskName;
Task(const RCF::RcfSessionPtr& session, const std::string& taskName) :
mSession(session),
mTaskName(taskName)
{}
void execute()
{
// 执行任务逻辑
std::cout << "Executing task: " << mTaskName << std::endl;
// 向客户端发送任务结果
std::string result = "Task executed successfully.";
RCF::RcfSessionPtr session = mSession.lock();
if (session)
{
session->sendResponse(result);
}
}
};
class TaskServiceImpl
{
public:
void submitTask(const std::string& taskName)
{
RCF::RcfSessionPtr session = RCF::getCurrentRcfSession();
Task task(session, taskName);
task.execute();
}
};
RCF_BEGIN(I_TaskService, "I_TaskService")
RCF_METHOD_R1(void, submitTask, const std::string&)
RCF_END(I_TaskService)
int main()
{
try
{
RCF::RcfInitDeinit rcfInit;
RCF::RcfServer server(RCF::TcpEndpoint(50001));
TaskServiceImpl taskService;
server.bind<I_TaskService>(taskService);
server.start();
std::cout << "Server started." << std::endl;
server.join();
}
catch (const RCF::Exception& e)
{
std::cout << "Error: " << e.getErrorString() << std::endl;
return 1;
}
return 0;
}
客户端代码(client.cpp):
#include <iostream>
#include <RCF/RCF.hpp>
class TaskCallback
{
public:
void onTaskCompleted(const std::string& result)
{
std::cout << "Task completed with result: " << result << std::endl;
}
};
RCF_BEGIN(TaskCallback, "TaskCallback")
RCF_METHOD_R1(void, onTaskCompleted, const std::string&)
RCF_END(TaskCallback)
int main()
{
try
{
RCF::RcfInitDeinit rcfInit;
RCF::RcfClient<I_TaskService> taskServiceClient(RCF::TcpEndpoint("localhost", 50001));
std::string taskName = "SampleTask";
taskServiceClient.submitTask(taskName);
std::cout << "Task submitted." << std::endl;
TaskCallback taskCallback;
RCF::RcfClient<TaskCallback> taskCallbackClient(taskServiceClient);
taskCallbackClient.onTaskCompleted(taskCallback, &TaskCallback::onTaskCompleted);
RCF::sleep(5000); // 等待任务完成
taskCallbackClient.onTaskCompleted().unbind();
taskServiceClient.disconnect();
}
catch (const RCF::Exception& e)
{
std::cout << "Error: " << e.getErrorString() << std::endl;
return 1;
}
return 0;
}
编译和运行:
- 在命令行中进入源码所在目录。
- 编译服务端代码:
g++ -std=c++11 server.cpp -lRCF -o server - 编译客户端代码:
g++ -std=c++11 client.cpp -lRCF -o client - 启动服务端:
./server - 启动多个客户端:
./client(可以多次执行此命令来启动多个客户端)
注意:在编译时需要确保已经正确安装了RCF库,并将RCF头文件和库文件正确地放置在编译环境中。
原文地址: http://www.cveoy.top/t/topic/i1VX 著作权归作者所有。请勿转载和采集!