繁体   English   中英

网络上可变数量的参数

[英]variable number of arguments over network

我正在尝试使用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/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM