我正在使用c ++为客户端和服务器编写一些代码。
我正在使用boost serialize来序列化客户端上的对象,然后将其发送到服务器。 然后,服务器反序列化流并重新创建对象。 然后,服务器调用该对象的run函数。 然后,服务器将对象序列化并将其发送回客户端。
我执行上述操作的原因是例如客户端需要知道服务器上/ home / dataIncoming文件夹中的文件。
这只是一个简单的例子
我的问题是,对于序列化的对象,我需要在服务器和客户端上使用相同的代码。或者服务器如何知道如何反序列化发送的对象。
因此,如果我更改服务器代码,我需要确保我也将代码转到客户端程序。
程序员如何轻松解决客户端和服务器上重复代码的问题?
或者有什么方法可以序列化,所以这个重复的代码不需要存在于客户端和服务器上吗?
或者我只是将协议流发送到服务器并让服务器读入该协议流以重建要运行的命令和要发回的信息。
最简单的方法是在客户端构建一个对象,让它在服务器上运行,然后将结果发送回客户端。
感谢您的所有想法!
答案 0 :(得分:1)
对于通用客户端服务器操作:
您将代码编译到库中,并在客户端和服务器上使用该库。
您的客户端和服务器都需要了解数据格式。没有办法解决这个问题。
您可以拥有一个更抽象的层,允许客户端提交新数据类型的格式,但这个抽象层本身需要是客户端和服务器都能理解的数据格式。
我不清楚你的例子与通用案例有何不同(它完全不同)。
答案 1 :(得分:1)
客户端和服务器必须共享数据(和数据格式),但不能共享代码。
听起来你的对象包含三件事:
许多面向对象的编程鼓励将数据和在其上运行的代码放在同一个对象中,但这并不总是最好的解决方案。为什么不将这些东西分开呢?
将您的数据放入数据对象并对其进行序列化。服务器将具有对该数据进行操作的东西(可能是某些对象,但不一定),并且客户端将具有对该数据进行操作的东西。所以,我认为你只需要重新考虑你的程序结构。
您描述的架构也有另一个缺点。如果要修改服务器的行为,还必须更新客户端。如果这些问题是分开的,这不会是一个问题。您必须更新客户端和服务器的唯一原因是数据格式是否更改。
答案 2 :(得分:1)
通常,编码和解码由您使用的序列化库负责。 (google prorpbuf,nano-pb,boost等) 然而,由于从类/结构编码和解码将基本上是相同的。
基本上我们在两端需要相同的信息(服务器和客户端) 一个好主意是为这个功能模块创建一个dll或.so,当更改时可以反映在服务器和客户端上,而无需重新编译。