客户端服务器API交互

Client Server API interaction

本文关键字:交互 API 服务器 客户端      更新时间:2023-10-16

我正在编写一个客户端服务器程序,我的想法是让服务器尽可能简单。服务器将需要完成诸如"移动这个文件"、"删除一个文件"等任务,在文件中的列上运行这个复杂的算法并返回结果。

我已经创建了一个抽象类,它将在服务器和客户端之间发送,称为aTodo在这个抽象类中有一个名为DoClass()的方法,该方法将由服务器运行。

当前我的服务器正在监听并等待连接。当它接收到一个连接时,它通过反序列化创建一个aTodo类型的对象。然后服务器在该对象中运行DoClass函数。然后,服务器序列化对象并将其发送回客户端。下面是供参考的代码:

protocolBaseServer pBase(newSockFd); //create socket
std::unique_ptr<aTodo> DoThis; //create object variable
DoThis=protocolCom::Read<aTodo>(pBase); //read the stream into the variable
DoThis->DoClass();//call the do function in the 
protocolCom::Write(DoThis,pBase);//write back to the client

这是为服务器编程的好方法吗?这是非常简单的服务器。

我想到的另一种方法是创建一个委托类,它将被序列化并来回发送。这个委托会有一个DoDelegate方法。然后用户可以将任何函数放入委托的DoDelegate方法中。这实际上允许服务器运行类中的任何方法,而不仅仅是我现在让服务器运行的单个DoClass方法。

谢谢

这是做梦的好方法…

如何序列化泛型委托?这不是c++所能做到的…

同样,此时您的客户端必须包含服务器实现的所有逻辑。因为你实际上是通过序列化发送服务器类。

我认为您需要将命令对象和实现相应操作的处理程序分开。

另外,我建议服务器将接收到的命令排成队列,然后由一个单独的工作程序处理队列中的命令。

解决这个问题的常见方法是使用异步套接字io框架,如ACE或Asio。