【问题标题】:variable number of arguments over network网络上可变数量的参数
【发布时间】:2013-06-12 04:11:29
【问题描述】:
我正在尝试使用 boost asio 库制作客户端服务器应用程序。起初我设计了程序以相同的模式和相同的长度发送请求和响应,即有一个分隔符,在每个参数之间我把这个分隔符用来分隔参数,在服务器端我根据分隔符解析传入的流范围。
问题是随着程序的增长,我意识到在每个请求/响应上发送每个参数并不是一个好主意,因为有很多参数,根据请求/响应的类型,只有少数是必需的。所以我的问题是,什么样的设计可以通过网络发送可变数量的参数?
【问题讨论】:
标签:
c++
network-programming
boost-asio
【解决方案1】:
您可以使用下面提到的消息 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/
【解决方案2】:
如果数据量很小,我不介意基于文本的解决方案。
只需写入/读取数据一个属性
(= 名称:+ 值)每一行。
甚至可能使用 xml。有图书馆可以读/写。