短消息网关通信模块的设计与实现 |
| 作者:黄华 张靖宇 来源:不详 发布时间:2005-7-8 15:23:27 |
|
后与汇接网关通信,请求目的地的网关地址,然后与目的网关建立socket连接,交付该消息并记录前转话单。 在整个通信模块中,所有的server都使用队列接口函数mqm_init( )初始化消息队列并复接在队列上。收发数据使用mqm_send( )和mqm_recv( )函数完成。存储消息采用固定的数据结构,其结构如下: struct mqm_connection { unsigned int package_server_seqnum; //由网关自行产生。若消息从队列4中来,该元素将是转化后的CMPP协议格式的消息序列号;若消息从队列2中来,该元素将是转化后的SMPP协议格式的消息序列号。 short mqm_sockfd; //接收该消息的socket; short mqm_seqnum; //收到的消息序列号; time_t mqm_timeout; //收到该消息的时间; int total_length; //该消息的长度; char mqm_buf[MAX_PACKET_SIZE]; //该消息的内容; char converted_buf[MAX_PACKET_SIZE]; //转换协议后的消息内容; }; 现以MO请求业务为例,描述通信模块的工作流程。 当SMSC以SMPP格式的DELIVER_SM消息发出订阅某个SP的言语传情短消息,经由smpp_server收到,从队列4中转发给package_server。Package_server收到MO请求后回送给SP一个SMPP格式的DELIVER_SM_REP应答消息,并用mqm_connection结构体存储这条MO消息的各个信息。 之后,package_server就把该消息转换成CMPP协议的CMPP_Deliver消息,并通过队列1送到cmpp_server中,转发给目的SP。SP在接收到这个消息后,会产生一个CMPP格式的CMPP_Deliver_Rep的应答消息返回给网关。当package_server收到了应答信号,也需要用mqm_connection结构体存储。这时,一条MO短消息转发成功,package_server记录SMO话单。 下面给出在Linux7.2版本的操作系统下,用C语言实现的package_server的主要代码: main() { mqm_init( ); //初始化队列; …… pipe( ); //建立管道; if (( child_pid = fork( ) ) ==0) { //通过管道通知2队列有数; while(1){ get_result_msg_info(REQUEST_2,pipfd2[1]); } } …… //建立监听描述符集; FD_ZERO ( &monit); FD_SET ( )_; …… //处理队列中来的数据 while(1) { select ( ); //监听2,4,6队列; if ( FD_ISSET(queue2,&read_monit )) //如果2队列有数; { handle_queue2_in( );//处理2队列来的数据; } …… }//end while; } //end main; 4 结束语 短消息网关是无线互联网短消息业务中最为关键的一个设备,它为手机用户和互联网的信息资源架起了一座桥梁。本文中短消息网关的通信模块设计周全,结构合理,为计费、路由、超时重传等模块提供了良好的扩展性。经实验室测试,在奔2处理器,64兆内存的机器上,收发包速率为每秒5000条,不丢包率达到100%,是一个稳定的系统。 参考文献 [1] 短消息网关设备规范(V1.2).中国移动通信集团公司,2001. [2] 中国移动通信短消息网关测试规范(V1.2). 中国移动通信公司,2001. [3] 中国移动通信信息资源站实体与互联网短消息网关接口协议(V1.3).中国移动通信集团公司,2001. [4] Short Message Peer to Peer Protocol Specification v3.4 .SMPP Developers Forum,1999. [5] W.Richard Stevens.UNIX网络编程.施振川,周利民,孙宏晖等译.清华大学出版社,1999. |
| [] [返回上一页] [打 印] |
|
文章评论 |
