【作 者】季磊,郭旭,施華宇
解放軍總醫(yī)院計(jì)算機(jī)應(yīng)用與管理科,北京市,100853
移動(dòng)醫(yī)療終端是我們IT部門對(duì)我院下一代手持設(shè)備的命名,主要為了解決臨床以及相關(guān)業(yè)務(wù)的移動(dòng)辦公需求。醫(yī)院對(duì)移動(dòng)設(shè)備的需求是多樣性的,比如醫(yī)生需要一種屏幕較大的手持設(shè)備來獲取病歷等相關(guān)信息以方便查房,同樣的設(shè)備也能滿足護(hù)士長(zhǎng)的交班查房工作;護(hù)士需要一種微(小)型化的設(shè)備進(jìn)行臨床醫(yī)囑的確認(rèn)[1],也可能需要一種屏幕稍大的設(shè)備在換藥室進(jìn)行藥品的配置查對(duì);藥師需要一種手持設(shè)備方便藥品物資的信息采集;對(duì)于管理部門來說手持設(shè)備的用處也很多,比如院長(zhǎng)關(guān)心的醫(yī)療動(dòng)態(tài)信息,醫(yī)德醫(yī)風(fēng)評(píng)價(jià)等等。
上述系統(tǒng)都是針對(duì)某一項(xiàng)具體業(yè)務(wù)的,而業(yè)務(wù)之外需要一個(gè)即時(shí)通信系統(tǒng)[2-4]。我們希望利用院區(qū)內(nèi)的無線網(wǎng)絡(luò)實(shí)現(xiàn)短消息、語(yǔ)音的傳送,成為醫(yī)務(wù)人員之間溝通的輔助通信工具。例如,病房或診室里的醫(yī)生可以隨時(shí)與院區(qū)內(nèi)其他位置的醫(yī)護(hù)人員聯(lián)系,通過視頻、音頻、文字進(jìn)行溝通。同時(shí)我們認(rèn)為利用移動(dòng)醫(yī)療終端可以進(jìn)行數(shù)字、圖像、語(yǔ)音的綜合傳輸,為遠(yuǎn)程醫(yī)療應(yīng)用提供另一個(gè)發(fā)展空間。
本文就如何實(shí)現(xiàn)這樣一個(gè)通信系統(tǒng)進(jìn)行了闡述。首先,說明我們的基本需求;然后,介紹了我們自主設(shè)計(jì)的通訊規(guī)范,具體分析了幾個(gè)通信流程,簡(jiǎn)要介紹了關(guān)鍵技術(shù);最后,給出了我們的下一步目標(biāo)。
我院的基礎(chǔ)網(wǎng)絡(luò)環(huán)境比較好,基本實(shí)現(xiàn)了醫(yī)療區(qū)域內(nèi)部的無線網(wǎng)絡(luò)覆蓋,在此基礎(chǔ)上已經(jīng)構(gòu)建了許多基于無線網(wǎng)絡(luò)的應(yīng)用。由于信息保密的要求,醫(yī)療辦公數(shù)據(jù)要與互聯(lián)網(wǎng)隔絕,因此我們定制的移動(dòng)醫(yī)療終端設(shè)備刪除了手機(jī)通訊模塊,只保留Wifi模塊,通過院區(qū)內(nèi)無線網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)交換。
對(duì)于手持終端的功能需求,我們總結(jié)出了如下基本條目。
(1)通訊錄
顯示和存儲(chǔ)用戶姓名、性別、所在部門;用戶按照部、科室進(jìn)行組織;可設(shè)定特定用戶是否出現(xiàn)在其他用戶的通訊錄中;提供用戶管理程序,能夠管理用戶的組織結(jié)構(gòu)。
(2)用戶狀態(tài)
終端狀態(tài)分為兩種:在線和離線;系統(tǒng)開機(jī)則進(jìn)入在線狀態(tài),關(guān)機(jī)則進(jìn)入離線狀態(tài)。
(3)短消息
向通訊錄中的用戶發(fā)送文字和簡(jiǎn)單符號(hào)消息;接收方能夠在線接收消息;如果接收方離線,上線后能夠收到此消息;能夠群發(fā)消息;消息內(nèi)容最大長(zhǎng)度500個(gè)字;后臺(tái)保留短消息發(fā)送記錄,提供后臺(tái)查詢功能。
(4)音視頻通話
向通訊錄中的單個(gè)用戶發(fā)起通話請(qǐng)求;能夠進(jìn)行音頻通話;能夠進(jìn)行視頻通話;發(fā)起方能得知接收方的占線狀態(tài)。
(5)文件傳送
向通訊錄中的單個(gè)用戶發(fā)起文件傳送請(qǐng)求;能夠選擇本機(jī)文件,包括文本、圖片、音視頻文件;能夠?qū)⑽募凑赵诰€、離線兩種方式發(fā)送;在線發(fā)送,等待接收方接收,一定時(shí)間未接收則提示斷開;離線發(fā)送,在接收方上線后通知接收;后臺(tái)不存儲(chǔ)在線文件,離線文件保留7天。
針對(duì)上述的功能需求,我們認(rèn)為關(guān)鍵和難點(diǎn)在短消息和通話流程方面。我們?cè)O(shè)計(jì)的基本流程大致步驟如下:
(1)開機(jī)
終端從服務(wù)器更新通訊錄,開啟終端定時(shí)同步服務(wù)。
(2)同步
終端的獨(dú)立后臺(tái)服務(wù),為短消息、通話提供支持。主要工作是定時(shí)向服務(wù)器發(fā)送同步消息,匯報(bào)IP地址、通話狀態(tài),并獲取未接收的短消息和通話記錄信息。
圖1 短消息接收流程圖Fig.1 Receiving flowchart of messages
(3)短消息
采用服務(wù)器存儲(chǔ)轉(zhuǎn)發(fā)機(jī)制,所有短消息都在服務(wù)器存儲(chǔ):發(fā)送終端向服務(wù)器發(fā)送短消息,服務(wù)器解析并存儲(chǔ),同時(shí)為每個(gè)接收者創(chuàng)建接收記錄,并置狀態(tài)為未轉(zhuǎn)發(fā)。如果在這個(gè)過程中失敗,則返回發(fā)送端失敗報(bào)告。接收終端同步時(shí)檢索并接收此短消息,并置狀態(tài)為已轉(zhuǎn)發(fā)。圖1說明了短消息接收過程。
(4)通話
分為兩個(gè)部分:正常流程和例外處理。
正常流程:
· 發(fā)起通話。發(fā)起端向服務(wù)器發(fā)送連接請(qǐng)求,服務(wù)器在內(nèi)存新建一條通話記錄,狀態(tài)設(shè)置為“請(qǐng)求”。
· 應(yīng)答。接收端同步時(shí)獲取此通話記錄狀態(tài),先將通話記錄狀態(tài)設(shè)置為“應(yīng)答”,然后開啟監(jiān)聽服務(wù)。
· 建立通話。發(fā)送端同步時(shí)獲取此通話記錄狀態(tài),與接收端開啟通話。
· 同步通話。通話中的發(fā)送端和接收端在同步時(shí)都會(huì)向服務(wù)器匯報(bào)狀態(tài)為“通話中”。
· 結(jié)束通話。通話結(jié)束后,發(fā)送端告知服務(wù)器,服務(wù)器將內(nèi)存通話記錄狀態(tài)設(shè)置為“結(jié)束”,同時(shí)保存到數(shù)據(jù)庫(kù)并清出內(nèi)存。
例外處理:
· 接收方無應(yīng)答。發(fā)起通話中發(fā)起端開啟請(qǐng)求計(jì)數(shù)器,每次同步累加請(qǐng)求計(jì)數(shù),超出限制則認(rèn)為通話失敗。
· 接收方占線。發(fā)起通話中服務(wù)器查詢通話記錄,如果發(fā)現(xiàn)接收端“通話中”,則返回占線。
· 通話時(shí)掉線。通話中的發(fā)送端和接收端在同步時(shí)都會(huì)向服務(wù)器匯報(bào)狀態(tài)為“通話中”,服務(wù)器更新相關(guān)通話記錄中的時(shí)刻,稱為“最后通話時(shí)刻”。
服務(wù)器設(shè)置通話監(jiān)控服務(wù),定時(shí)處理未正常結(jié)束的通話記錄:如果最后通話時(shí)刻長(zhǎng)時(shí)間未更新則認(rèn)為掉線,服務(wù)器存儲(chǔ)通話記錄到數(shù)據(jù)庫(kù)并清出內(nèi)存。
為了方便終端和服務(wù)器的交互,我們自定義了一套通信協(xié)議,規(guī)定了上述各個(gè)步驟的數(shù)據(jù)交互標(biāo)準(zhǔn)。終端和服務(wù)器采用Web服務(wù)方式進(jìn)行交互,以xml文檔作為消息報(bào)文。
(1)報(bào)文頭部
每個(gè)報(bào)文以都有固定的頭部,請(qǐng)求報(bào)文由終端主動(dòng)發(fā)往服務(wù)端,格式為<mmt><code></code></mmt>,其中mmt是根節(jié)點(diǎn)元素,code表明了消息代碼。
每個(gè)請(qǐng)求報(bào)文對(duì)應(yīng)一個(gè)響應(yīng)報(bào)文,格式為<svr><code></code><result></result><errormsg></errormsg></svr>,其中svr是根節(jié)點(diǎn)元素,code對(duì)應(yīng)請(qǐng)求報(bào)文,result和errormsg分別描述了結(jié)果和失敗詳細(xì)信息。
我們使用五種報(bào)文來完成上述通訊業(yè)務(wù),分別是終端開機(jī)、終端同步、發(fā)送短消息、發(fā)起通話和結(jié)束通話。每個(gè)業(yè)務(wù)都包含一對(duì)請(qǐng)求和響應(yīng)報(bào)文,通過消息代碼表明業(yè)務(wù)類型,然后加入各自的特殊元素。下面對(duì)其中的同步報(bào)文作舉例說明。
(2)同步報(bào)文
同步過程是我們的系統(tǒng)中的關(guān)鍵部分,短消息的接收、通話的建立都由同步過程來完成。具體的工作包括:匯報(bào)終端地址和終端通話狀態(tài);獲取通話記錄狀態(tài);獲取未轉(zhuǎn)發(fā)短消息。服務(wù)器除了返回短消息之外,還要根據(jù)終端的狀態(tài)為請(qǐng)求通話的雙方作通話連接的準(zhǔn)備,或者記錄最后通話時(shí)間。以下是報(bào)文格式。
服務(wù)器端我們使用.net作為開發(fā)平臺(tái),以Web服務(wù)形式與終端交換數(shù)據(jù)。后臺(tái)采用Oracle作為存儲(chǔ),內(nèi)容包括終端信息、終端通訊錄、短消息記錄和通話記錄。
客戶端應(yīng)用構(gòu)建在Android[5]平臺(tái)之上,使用java開發(fā)語(yǔ)言。后臺(tái)采用SQLite[6]存儲(chǔ),內(nèi)容包括聯(lián)系人、短消息記錄和通話記錄,數(shù)據(jù)均來自服務(wù)器端。
即時(shí)通信是我們?yōu)橐苿?dòng)醫(yī)療終端開發(fā)的一個(gè)獨(dú)立功能,它與醫(yī)院業(yè)務(wù)沒有直接的關(guān)系,主要目的是方便溝通并且做到信息保密。我們系統(tǒng)的特點(diǎn)是自主設(shè)計(jì)了一套通信規(guī)范,形成了一套通信協(xié)議,比較好地解決了通訊效率、終端運(yùn)算能力等問題。
系統(tǒng)目前還處于開發(fā)當(dāng)中,已經(jīng)實(shí)現(xiàn)了服務(wù)器、手持終端的大部分功能。后續(xù)還要加入PC終端,并且進(jìn)行一定用戶量的測(cè)試,最終達(dá)到一千個(gè)終端同時(shí)在線使用的目標(biāo)。
[1]季磊,薛萬國(guó).網(wǎng)絡(luò)模式下醫(yī)囑閉環(huán)管理應(yīng)用模式探索[J].中國(guó)數(shù)字醫(yī)學(xué).2011,6(10): 74-76.
[2]羅偉.基于Android平臺(tái)的即時(shí)通訊系統(tǒng)的研究與實(shí)現(xiàn)[D].長(zhǎng)沙:湖南師范大學(xué),2009
[3]陳武.基于XMPP的企業(yè)級(jí)即時(shí)通信系統(tǒng)研究與實(shí)現(xiàn)[D].武漢:武漢理工大學(xué),2009
[4]馬志強(qiáng).基于Android平臺(tái)即時(shí)通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].北京:北京交通大學(xué),2009
[5]蓋索林.Google Adnroid開發(fā)入門指南[M].北京: 人們郵電出版社,2009
[6]About SQLite[EB/OL].http://www.sqlite.org/about.html,2012-8-3