我正在尝试使用boost asio库创建客户端服务器应用程序。起初我设计了程序来发送具有相同模式和相同长度的请求和响应,即有一个分隔符,在每个参数之间我把这个分隔符分隔参数,在服务器端我根据分隔符解析传入流参数。 问题是随着程序的增长,我意识到在每个请求/响应上发送每个参数并不是一个好主意,因为有很多参数,根据请求/响应的类型,只需要很少的参数。所以我的问题是通过网络发送可变数量的参数会是什么样的设计?
答案 0 :(得分:3)
您可以使用下面提到的消息ID创建消息层次结构。
struct Msg{
int msg_id;
type t1;
type t2;
}
struct init_Msg : public Msg{
type init_param;
}
struct inti end_Msg : public Msg{
type end_param;
}
然后,您可以在客户端创建具有消息ID的特定消息。将其序列化并通过网络发送到服务器。在服务器端,您可以反序列化它,并可以使用消息ID来标识消息的类型。 要序列化数据,您可以使用名为protobuf的第三方库。 看看https://code.google.com/p/protobuf/
答案 1 :(得分:1)
如果数据量很小,我不介意基于文本的解决方案。
只需写入/读取数据一个属性
(=名称:+值)每一行。
也许甚至使用xml。有读/写的库。