协议指令设计模式心得

好久没写文章了。今天谈一下在个人最近的项目中协议指令设计心得。

本人的最近在做的项目是一个即时通信的网站(其实算是一个本人的人工智能项目测试工具而已)。为方便变描述,下文中S表示服务器,C表示客户端。起初本人在设计的时候C和S的通信协议是一问一答的模式,就是通过C主动向S请求、然后S给与相应的回复。比如一个登陆协议,C向S发送:{ “type”:0x0001, “loginAccount”:“xxx”, “loginPassword”:“xxx” }信息,S验证通过后向C回复{ “type”:0x0001,“info”:{ “name”:“xxx”, “sex”:“x”, “age”:10 } }。这里面的type字段就是协议指令号,也就是每个指令都有来回。但是这样会出现冗余的问题,假如还有一条更新用户信息的协议,比如C向S发送{ “type”:0x0002, “loginAccount”:“xxx”, “info”:{ “name”:“xxx”, “sex”:“x”, “age”:10 } },然后S向C回复用户最新信息{ “type”:0x0002,“info”:{ “name”:“xxx”, “sex”:“x”, “age”:10 } }。这里就是因为一个type字段内容不同,导致协议数据结构出现冗余。这样在编码的时候会有很多数据结构内容是一样,重复性太高,降低代码质量。也许有的人会说,协议可以按照上诉那样设计,代码可以不那样写,那不就解决了数据结构冗余问题?我只想说有这种想法的人比较天真,你没法保证你写的不出问题,时间久了,如果你当初的程序编写和你所设计协议文档不一致的,你会很难弄明白你之前写的。

这里针对上述的情况,我的解决方案是将C和S之间通信协议改为相互独立的,不再是一问一答的方式。比如讲S给C回复的0x0001和0x0002都改为用户信息协议0x1001。这样C给S发送0x0001和0x0002的时候,S统一给C回复0x1001,而且在设计C和S之间的通信协议时尽量的按照对象设计模式去实现,而且编码时也要和通信协议的数据结构一致。这样提高程序维护性。

需要说明的这种一问一答的通信模式并非不好,只是说在目前本人最近的项目这样实现不是很好,本人也因此付出了很大的代价,做了很大的改动。也算是一种学习过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值