单春燕
[摘要]通过对相关通信技术的研究,结合目前油田普遍应用的FeiQ通信软件及相应的IPMSG通信协议,研究了在自主开发的应用系统中发送消息到用户FeiQ通信软件的方法,并采用Web服务技术实现了消息发送功能的共享应用。针对非在线用户,通过创建Windows服务程序,采用线程实现了消息的转存以及对网络中新上线用户的监听,进而实现对未成功发送的消息的二次转发。
[关键词]IPMSG协议;Web服务;Windows服务;线程
doi:10.3969/j.issn.1673-0194.2013.08.027
[中图分类号]F270.7;TP393[文献标识码]A[文章编号]1673-0194(2013)08-0051-02
1 引 言
在油田生产、管理过程中,各部门之间的业务是环环相扣、息息相关的,基于业务过程的软件,如:公文流转、项目审批等系统,一般都涉及多个不同的用户,文档、信息或任务需要在多个用户之间流转,流转过程的连续性是保证工作效率的前提。因此,当有新的任务到达某个用户时,需要及时通知该用户。目前,一般采用电话通知的方式,当任务量大、用户多时,这种方式效率较低,而且容易造成遗漏。因此,有必要探索一种新的方式,使得系统能够自动地提醒用户及时处理新的任务。
2 技术分析
IPMSG协议是FeiQ软件和飞鸽传书软件为实现通信所制订的通信协议,IPMSG规定通信双方的数据包格式为“Ver(1): PacketNo:SenderName:SenderHost:CommandNo:AdditionalSection”,解释为:“版本:包编号:发送者名字:发送主机:命令编号:附加信息区域”。其中,CommandNo为IPMSG预定义的命令。FeiQ通信时采用UDP连接方式将以上格式的信息通过2425端口发送到目标主机。目标主机对信息进行解析,根据CommandNo决定对信息如何处理。
基于以上分析,用户客户端直接采用FeiQ软件,避免客户端消息提醒软件的开发工作。为了避免类似系统之间的重复开发,达到功能共享的目的,根据IPMSG协议实现消息发送功能之后,采用Web服务的方式进行封装和发布,为应用系统提供统一的调用接口。对不在线用户,需要实现消息的存储、上线行为的监听和消息的再次发送,采用Windows服务来实现。
3 服务设计
3.1 Web服务设计
首先,遵循IPMSG协议,采用UDP通信方式,开发Web服务FeiQMessage,提供Send(IP,Message)操作,为应用提供消息发送服务。当有重要信息需要提醒用户时,由应用系统根据上下语境,自动生成消息内容,把需要发送的消息与发送目标的IP地址传递给服务,由服务实现消息的发送。
发送消息时数据包中的CommandNo为:IPMSG_SENDMSG + IPMSG_SENDCHECKOPT,IPMSG_SENDMSG告诉对方发送的内容是一条消息,对方会把消息内容用弹出提示框的形式显示出来。IPMSG_SENDCHECKOPT要求对方确认收到后回复一条信息,如果用户在线,会自动回复一条确认信息,不在线则不会有返回信息。FeiQMessage服务通过该指令可以判断用户是否在线,对不在线用户的消息,把消息转发给Windows服务来处理。
3.2 Windows服务设计
开发Windows服务TransferMessageFeiQ,封装了2个功能:SaveMessage和SendMessage。①Windows服务采用主线程不间断地监听2425端口,如果接收到CommandNo为IPMSG_SENDMSG的消息则创建新的子线程SaveMessage保存信息到数据库中;②当有用户上线时,用户FeiQ软件在网络中广播告知上线,Windows服务接收到CommandNo为IPMSG_BR_ENTRY的信息,则创建新的子线程SendMessage从数据库中检索属于该用户的信息并发送到该用户;③而主线程在创建完子线程之后继续监听端口并重复以上操作。
通过Windows服务实现了用户上线的监听,从而实现了消息的存储和再次转发,确保重要信息通知到用户的功能。图1是服务之间内部的调用关系实例。C1用户在操作应用程序时,产生消息需要通知C2和C3,通过调用Web服务成功发送信息到C2并获取到返回的确认信息。由于C3不在线发送失败,则Web服务将消息转发给Windows服务,通过SaveMessage存入数据库中。当C3上线时,自动广播上线通知到Windows服务,Windows服务通过SendMessage线程获取属于该用户的信息并发送给C3。