网络上可变数量的参数

variable number of arguments over network

本文关键字:参数 网络      更新时间:2023-10-16

我正在尝试使用boost asio库制作客户端服务器应用程序。首先,我设计了程序,以相同的模式和相同的长度发送请求和响应,即有一个分隔符字符,在每个参数之间,我把这个分隔符用于分隔参数,在服务器端,我根据分隔符参数解析传入流。问题是,随着程序的增长,我意识到在每个请求/响应上发送每个参数并不是一个好主意,因为有很多参数,根据请求/响应的类型,只有少数参数是必要的。所以我的问题是,什么样的设计可以很好地通过网络发送可变数量的参数?

您可以使用下面提到的消息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/

如果数据量很小,我不介意基于文本的解决方案。只写/读数据一个属性
(= name: + value)每行甚至可以使用xml。