短消息网关通信模块的设计与实现 |
|---|
| WAP技术站:www.wapease.com
|
3 短消息网关通信模块的设计与实现 短消息网关通信模块是整个短消息网关的基础。无论是计费、统计,还是超时重传,高质量的通信构架是必不可少的保障。这个通信构架不仅要完成基本的收发消息的功能,而且还要有好的结构以支撑各种业务需求,保证良好的扩展性。 3.1. 短消息网关通信模块的设计 在设计短消息网关通信模块时,我们考虑了以下几点: 第一,由于短消息网关功能繁多,如果把通信和具体业务合在一起开发,容易顾此失彼。可能会因为开始的考虑不周全,造成在增加某项新业务时不得不修改通信底层和原来的业务代码,导致重复开发。所以我们采用通信代理的方式把通信和具体业务分开,在增加新业务时,就只需少量修改通信代理的设置,而且不必再改动原来的业务代码了。 第二,通信代理需要同时侦听多个端口,我们选用多路复用I/O这种方式。虽然多线程能够通过并行计算和共享内存提高代码效率和资源利用率,但在短消息网关中,处理的数据量大,多线程方式的并行处理会造成一些消息的逻辑混乱,资源共享也会增加代码的复杂度。而多路复用使用简单,逻辑清晰明了,不易发生错误,也不会出现因资源共享带来同步和互斥问题。因此使用多路复用I/O是比较合理的。 第三,业务处理模块与通信代理之间可以使用队列进行通信,对队列的管理和参数的设置(例如对同一队列操作的互斥,以及队列个数的设置等)都使用专门的队列内核程序统一调度并封装成函数接口,以方便业务处理模块对队列的使用。另外,通过队列通信,也可以为今后增加的业务提供良好的扩展性。 第四,为了达到99.999%的不丢包率,通信代理需要使用流量控制机制以保证网关内部不丢包。这是因为无论队列设置有多大,如果出现消息只发不收的情况,都会造成队列溢出而丢包。因此,为每个队列中缓存的消息做记录,当某个时刻队列消息的数量达到规定限度,队列就不再收包,以保证到达网关的消息不会丢失。 3.2. 短消息网关通信模块的实现 基于以上设计思路,我们实现的短消息通信模块包括四个父进程:CMPP通信代理(cmpp_server)、SMPP通信代理(smpp_server)、消息分发处理server(package_server)和前转消息处理server(route_server)。它们之间通过6个消息队列相互通信。具体的软件结构如图2所示。 |
| 上一篇:如何构建固定网(PSTN)短消息系统 下一篇:短信系统的所应有的功能 |
|
