首页 > 程序开发 > 软件开发 > C语言 >

C语言实现一种简单的应用服务器内部数据结构的思路(一)

2011-09-09

用C语言写应用服务器的过程中,由于服务器通常要和多个外围系统打交道,接受多个客户端的请求,或调用其他应用的服务,中间可能涉及到多种通讯格式,所以在服务器内部维护一套与外界无关的数据格式是必须的。而在...

用C语言写应用服务器的过程中,由于服务器通常要和多个外围系统打交道,接受多个客户端的请求,或调用其他应用的服务,中间可能涉及到多种通讯格式,所以在服务器内部维护一套与外界无关的数据格式是必须的。而在一般的业务开发中,经常需要变动字段,很难在前期确定需要的所有字段,所以内部结构的灵活性与可扩展性也是很重要的,而且底层的字段定义的长度,类型,或者添加新的字段时不应引起上层的修改。

C语言中最简单的内部接口可能就是采用一个结构体,这种方式实现最简单,其实是语言内置,无需实现,而且访问时存取效率很高;缺点就是结构是静态编译的,一旦修改就涉及到程序的重新编译,而且在报文转换过程中只能采用大量的重复编码来拷贝数据,数据的对应关系也是静态的。而比较灵活的数据存储方式可能类似java中的Map接口,采用get和put方式,数据采用key->value的方式存储,这样灵活性与可扩展性非常好,上层应用编码舒服,数据与具体的取数据的方法不再静态的耦合在一起,但是可能涉及到一些内存的动态分配,内部实现要求较高,而且有些效率的问题。本文的思路是在保证上层应用编码舒服上,采用比较简单的思路来实现一种内部结构。

在一般的开发过程中,一次开发所需要的数据是可以定下来的(下次需求的变更需要什么数据是不定的),所以只要实现字段好添加就可以了,而对上层的应用的数据结构就采用get和put这种key->value的方式。这个思路的核心其实很简单,只要维护一份配置文件,把需要的所有字段的key名字,需要存储空间的大小保存在里面,程序运行后加载这个文件,按照配置将各个字段的存储位置分配好,并在内存中维护一份key和对应该数据的存储地址的映射关系就ok了,在get时根据key找到对应的地址,将数据读出来,put时也类似,在使用上与Map差不多易用,主要的区别就是对应的key必需事先在文件中配置,不然在存取时报错。当然,在这个的基础上必须结合实际做一些扩展才比较好用。

作者“OneThin的博客”

相关文章
最新文章
热点推荐