场景:
基于网络的C/S架构的业务系统,Client端是自助终端设备,使用电信3G网络通讯,由于网络的不稳定(个别时刻只能达到10K的有效带宽),考虑到通讯的即时性,采用Socket通讯,每个数据包含有包唯一ID号、版本号等基本信息,不定长,字节总数不超过512Byte。
问题:
为了能监控终端机运行状态 以及 业务运行情况,需要终端机器不定时发送数据包至服务器,考虑到通讯协议 将来 增加 以及 版本更新 的需要,有没有好办法以最小的更新代价来实现数据包的解析处理。
已考虑方案:
1、 以包唯一ID+版本号为每一个协议数据包写一个处理类做解析;当收到数据包时,解析的到ID号和版本号,根据一定的映射规则实例化响应的处理类,做进一步处理;这种方式虽然思路简单,但可能会产生几百个解析类,可维护性上可能不够好;另外是否还会产生其他问题,也不能确定。
2、 考虑能在数据库中把包协议的域、长度等信息做配置,接收到数据包时从数据库读取相关配置做解析,
但是这只是一个思路,还没想明白实际操作该如何处理,欢迎大家补充
欢迎大家给出自己的考虑,谢谢。
请注意:
暂不考虑数据传输过程的问题,比如粘包、半包等问题,此问题讨论的假设前提是 数据包完全接收,重在如何解析!