我正在编写客户端服务器程序,我的想法是让服务器尽可能简单。服务器需要完成诸如"移动此文件","删除文件"等任务。 ,在文件中的列上运行此复杂算法并发回结果。
我创建了一个抽象类,它将在服务器和客户端之间发送,名为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方法中。这会影响允许服务器在类中运行任何方法,而不仅仅是我现在运行服务器的Single DoClass方法。
由于
答案 0 :(得分:1)
这是一个很好的梦想......
您如何序列化通用委托?这不是C ++促成的......
此外,此时您的客户端必须包含服务器实现的所有逻辑。因为您实际上是通过序列化发送服务器类。
我认为您需要分离命令对象和实现相应操作的处理程序。
另外,我建议服务器对收到的命令进行排队,另一个工作程序处理队列中的命令。
解决这个问题的常用方法是使用异步套接字io的框架,例如ACE或Asio。