【作 者】季磊,郭旭,施华宇
解放军总医院计算机应用与管理科,北京市,100853
移动医疗终端是我们IT部门对我院下一代手持设备的命名,主要为了解决临床以及相关业务的移动办公需求。医院对移动设备的需求是多样性的,比如医生需要一种屏幕较大的手持设备来获取病历等相关信息以方便查房,同样的设备也能满足护士长的交班查房工作;护士需要一种微(小)型化的设备进行临床医嘱的确认[1],也可能需要一种屏幕稍大的设备在换药室进行药品的配置查对;药师需要一种手持设备方便药品物资的信息采集;对于管理部门来说手持设备的用处也很多,比如院长关心的医疗动态信息,医德医风评价等等。
上述系统都是针对某一项具体业务的,而业务之外需要一个即时通信系统[2-4]。我们希望利用院区内的无线网络实现短消息、语音的传送,成为医务人员之间沟通的辅助通信工具。例如,病房或诊室里的医生可以随时与院区内其他位置的医护人员联系,通过视频、音频、文字进行沟通。同时我们认为利用移动医疗终端可以进行数字、图像、语音的综合传输,为远程医疗应用提供另一个发展空间。
本文就如何实现这样一个通信系统进行了阐述。首先,说明我们的基本需求;然后,介绍了我们自主设计的通讯规范,具体分析了几个通信流程,简要介绍了关键技术;最后,给出了我们的下一步目标。
我院的基础网络环境比较好,基本实现了医疗区域内部的无线网络覆盖,在此基础上已经构建了许多基于无线网络的应用。由于信息保密的要求,医疗办公数据要与互联网隔绝,因此我们定制的移动医疗终端设备删除了手机通讯模块,只保留Wifi模块,通过院区内无线网络进行数据交换。
对于手持终端的功能需求,我们总结出了如下基本条目。
(1)通讯录
显示和存储用户姓名、性别、所在部门;用户按照部、科室进行组织;可设定特定用户是否出现在其他用户的通讯录中;提供用户管理程序,能够管理用户的组织结构。
(2)用户状态
终端状态分为两种:在线和离线;系统开机则进入在线状态,关机则进入离线状态。
(3)短消息
向通讯录中的用户发送文字和简单符号消息;接收方能够在线接收消息;如果接收方离线,上线后能够收到此消息;能够群发消息;消息内容最大长度500个字;后台保留短消息发送记录,提供后台查询功能。
(4)音视频通话
向通讯录中的单个用户发起通话请求;能够进行音频通话;能够进行视频通话;发起方能得知接收方的占线状态。
(5)文件传送
向通讯录中的单个用户发起文件传送请求;能够选择本机文件,包括文本、图片、音视频文件;能够将文件按照在线、离线两种方式发送;在线发送,等待接收方接收,一定时间未接收则提示断开;离线发送,在接收方上线后通知接收;后台不存储在线文件,离线文件保留7天。
针对上述的功能需求,我们认为关键和难点在短消息和通话流程方面。我们设计的基本流程大致步骤如下:
(1)开机
终端从服务器更新通讯录,开启终端定时同步服务。
(2)同步
终端的独立后台服务,为短消息、通话提供支持。主要工作是定时向服务器发送同步消息,汇报IP地址、通话状态,并获取未接收的短消息和通话记录信息。
图1 短消息接收流程图Fig.1 Receiving flowchart of messages
(3)短消息
采用服务器存储转发机制,所有短消息都在服务器存储:发送终端向服务器发送短消息,服务器解析并存储,同时为每个接收者创建接收记录,并置状态为未转发。如果在这个过程中失败,则返回发送端失败报告。接收终端同步时检索并接收此短消息,并置状态为已转发。图1说明了短消息接收过程。
(4)通话
分为两个部分:正常流程和例外处理。
正常流程:
· 发起通话。发起端向服务器发送连接请求,服务器在内存新建一条通话记录,状态设置为“请求”。
· 应答。接收端同步时获取此通话记录状态,先将通话记录状态设置为“应答”,然后开启监听服务。
· 建立通话。发送端同步时获取此通话记录状态,与接收端开启通话。
· 同步通话。通话中的发送端和接收端在同步时都会向服务器汇报状态为“通话中”。
· 结束通话。通话结束后,发送端告知服务器,服务器将内存通话记录状态设置为“结束”,同时保存到数据库并清出内存。
例外处理:
· 接收方无应答。发起通话中发起端开启请求计数器,每次同步累加请求计数,超出限制则认为通话失败。
· 接收方占线。发起通话中服务器查询通话记录,如果发现接收端“通话中”,则返回占线。
· 通话时掉线。通话中的发送端和接收端在同步时都会向服务器汇报状态为“通话中”,服务器更新相关通话记录中的时刻,称为“最后通话时刻”。
服务器设置通话监控服务,定时处理未正常结束的通话记录:如果最后通话时刻长时间未更新则认为掉线,服务器存储通话记录到数据库并清出内存。
为了方便终端和服务器的交互,我们自定义了一套通信协议,规定了上述各个步骤的数据交互标准。终端和服务器采用Web服务方式进行交互,以xml文档作为消息报文。
(1)报文头部
每个报文以都有固定的头部,请求报文由终端主动发往服务端,格式为<mmt><code></code></mmt>,其中mmt是根节点元素,code表明了消息代码。
每个请求报文对应一个响应报文,格式为<svr><code></code><result></result><errormsg></errormsg></svr>,其中svr是根节点元素,code对应请求报文,result和errormsg分别描述了结果和失败详细信息。
我们使用五种报文来完成上述通讯业务,分别是终端开机、终端同步、发送短消息、发起通话和结束通话。每个业务都包含一对请求和响应报文,通过消息代码表明业务类型,然后加入各自的特殊元素。下面对其中的同步报文作举例说明。
(2)同步报文
同步过程是我们的系统中的关键部分,短消息的接收、通话的建立都由同步过程来完成。具体的工作包括:汇报终端地址和终端通话状态;获取通话记录状态;获取未转发短消息。服务器除了返回短消息之外,还要根据终端的状态为请求通话的双方作通话连接的准备,或者记录最后通话时间。以下是报文格式。
服务器端我们使用.net作为开发平台,以Web服务形式与终端交换数据。后台采用Oracle作为存储,内容包括终端信息、终端通讯录、短消息记录和通话记录。
客户端应用构建在Android[5]平台之上,使用java开发语言。后台采用SQLite[6]存储,内容包括联系人、短消息记录和通话记录,数据均来自服务器端。
即时通信是我们为移动医疗终端开发的一个独立功能,它与医院业务没有直接的关系,主要目的是方便沟通并且做到信息保密。我们系统的特点是自主设计了一套通信规范,形成了一套通信协议,比较好地解决了通讯效率、终端运算能力等问题。
系统目前还处于开发当中,已经实现了服务器、手持终端的大部分功能。后续还要加入PC终端,并且进行一定用户量的测试,最终达到一千个终端同时在线使用的目标。
[1]季磊,薛万国.网络模式下医嘱闭环管理应用模式探索[J].中国数字医学.2011,6(10): 74-76.
[2]罗伟.基于Android平台的即时通讯系统的研究与实现[D].长沙:湖南师范大学,2009
[3]陈武.基于XMPP的企业级即时通信系统研究与实现[D].武汉:武汉理工大学,2009
[4]马志强.基于Android平台即时通信系统的设计与实现[D].北京:北京交通大学,2009
[5]盖索林.Google Adnroid开发入门指南[M].北京: 人们邮电出版社,2009
[6]About SQLite[EB/OL].http://www.sqlite.org/about.html,2012-8-3