單春燕
[摘要]通過對相關通信技術的研究,結合目前油田普遍應用的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。