对 marc 或任何有 protobuf-net 经验的人:
我有一个架构,其中服务器保持与客户端的终生持久连接(通过 TCP)。因为连接层/服务器应该有很高的正常运行时间,所以它只会反序列化消息并将它们传递给应用服务器/层。它本身不包含商业逻辑。
clients -> connection layer (deserialization) -> app layer (business logic)
问题是,虽然我现在可以更改 biz 逻辑,但我无法更改应用层和客户端共享的模型,因为连接层依赖于模型进行反序列化。
有没有办法让连接层仅将消息部分反序列化到基类,以用于转发/路由目的?
否则,我想我必须在基类中创建一个二进制字段,按原样传递并由应用层反序列化。一级序列化,二级反序列化。
编辑:充实
class Message
{
User user;
// not much else in here, potentially routing information
}
class RequestType1: Message
{
// lots of fields
// which are specific to this type of request/reply
}
class RequestType2: Message
{
}
连接层不应该关心特定请求类型的结构。这样我就可以随意更改它们,只要客户端和应用层都同意。但目前连接层进行反序列化,因此它确实需要知道模型,并且任何更改都会迫使我重新启动连接服务器。
我只需要它反序列化足以路由,这意味着“用户信息”+“子类型名称/编号”。