在放出“中国联通SGIP协议1.2版本C#实现”这篇文章(博客园的版本和这边的版本一致)之后,一些同道在问一些问题,今天大石头也再问,我贴出解答吧,但愿能够对各位有所帮助。

在不久前好像SGIP有点调整,导致编码格式不正确,呵呵,我没做调整,俺不晓得了,有兴趣的人自己去琢磨吧。

首先需要明确的是,的确在协议中需要实现一个接收的服务端,就是说本地需要一个侦听,端口号,用户名和密码都是必须的,而且是在和联通商谈SP开户的时候确认的,至于一些JAVA程序为啥没有侦听也能收到短信,这个我就不是很确定了。

我的做法是
1、一个公共得MO消息队列
2、一个公共的MT消息队列
3、一个服务线程,侦听特定的端口,接收来自SMG转发的最终用户(手机终端)发出的特定消息,保存这些消息到MO队列中
4、一个或者多个后台服务处理线程,当检测到MO队列中存在消息的时候,根据配置的规则处理短消息(从MO队列中移除),并生成最终发给最终用户(手机终端)的短消息,保存这些消息到MT队列中
5、一个服务处理线程,当检测到MT消息队列中存在未处理消息的时候,连接SMG,发送短消息。

MT和MO是两个单独的线程处理,所以不存在说在MT消息处理中处理MO的信息

SMG会以BIND作为第一个命令,需要检查用户名和密码

 

我画了一个简单的图,SP就是我们的程序,SMG是短信网关,而Terminal则是手机终端,这里只是常用服务的图,对使用主动推的不试用(主动推是业务不是协议,例如天气预报就是属于这种,没有MO,主动由SP发出MT,呵呵,能申请到的已经很少了,现在基本都是要有上行才能有下行的咯,所以俺的老客户也不要找我麻烦,俺没法弄新闻点播,主要是SMG不答应啊)。

image

有不对的请指正!


Jeason Zhao (沈胜衣,斛律光) ------雪饮再现,一个人的江湖
我知道我是谁,我是沈胜衣,默默的活着,就像空气。