APP下载

基于SIP的呈现服务系统的设计与实现

2017-06-05郜金丽王琴

电脑知识与技术 2017年10期

郜金丽 王琴

摘要:该论文基于SIP协议设计和实现了一套呈现服务系统,该系统提供了用户注册和发布Presence信息、接收和存储Presence信息、查询用户Presence信息、订阅用户Presence信息和接收订阅信息更改通知等功能。该论文实现的呈现服务系统可满足人们对即时通信业务越来越高的需求。

关键词:SIP协iE;订阅与通知;呈现服务

中图分类号:TP311

文献标识码:A

文章编号:1009-3044(2017)10-0013-03

1.可行性要求

本文主要研究SIP协议的通信过程以及基于SIP的存在服务的实现。在网络服务中得到了广泛的应用,然而,对业务应用还没有发挥潜力,存在用户信息的使用,可以开发一个基于存在的增值服务品种,从而为进一步研究实现基于SIP协议存在的服务是必要的。

2.系统总体结构设计

Presence Server系统主要采用多进程多线程设计,采用流水线方式实现进程间通信、模块化设计思想等。该系统主要分为接受消息处理和消息处理过程,从存在的消息存在信息源通过管道接到接收消息的过程发送到信息处理过程、信息处理过程解析消息,根据事件消息处理的具体类型、客户信息和发送响应,监测到期时间线和订阅消息处理过程中创建。

3.开发环境

3.1 Sun Solaris简介

Solaris是Sun公司开发的计算机操作系统。它被认为是UNIX操作系统的派生版本之一。Solaris是目前开源软件。在2005年6月14日,太阳将要开发的Solaris 11的源代码开放的CDDL许可证,这是OpenSolaris开放版。

3.2 Vi简介

有很多文本编辑器,如gedit,kwrite,OpenOffice的图形模式,文本模式编辑vi,vim(vi的加强版)。在linux中最常用的编辑器是。vi或者是hnux的最基本的文本编辑工具,vi或虽然图形界面编辑器没有简单的鼠标操作,但是vi编辑器在系统管理、服务器管理上,始终没有一个图形界面比编辑器。

4.系统详细设计与实现

本章讨论实现Presence服务系统所需要的方法以及关键技术,包括数据结构的设计,各个功能模块的详细设计等。

4.1系统数据结构设计

在本系统中数据结构详细设计如表1所示。

4.2系统功能模块设计与实现

4.2.1Ps系统初始化模块

PS系统调用forko函數创建子进程,在创建子进程前父进程先初始化套接字,forko创建子进程后拷贝一份套接字描述符,避免通过进程间通信机制,把父进程中的套接字描述符传送给子进程,从而使系统更易实现。在初始化套接字时,需要用户手动配置端口等信息,系统自动获取本地IP地址,端口信息展现给用户,在创建子进程后子进程与父进程共享套接字,避免在进程间进行套接字数据通信的复杂性。

4.2PS系统接收消息进程功能模块

PS系统接收消息进程把接收的到消息写入管道,由PS系统处理消息进程进行读取。流程图如图2所示。

4.3PS系统消息处理进程功能模块

Ps系统处理消息进程首先读取用户初始化配置文件,存放在本地群组链表中,然后循环从管道读取接收到的消息,由消息解析函数parse_header(char*buff int flag)得到消息头,parse_bodv(char*body)函数解析到消息体,在解析得到具体信息后根据事件类型请求注册,发布,请求订阅及通知响应事件,主要流程图如3所示:

4.4注册请求事件处理模块

注册请求事件处理主要负责处理Presentity发布的注册事件,判断注册事件合法性,添加新注册的用户到相应的群组链表中,同时更新本地配置文件。注册请求事件处理代码主要实

4.5发布请求事件处理模块

发布请求事件处理主要负责处理Presentity发布的Pres-ence信息,先判断是否群组用户的信息已经初始化,如果已经初始化,则判断Presence信息是否过期,如果没有过期,则更新群组用户的Presence信息。发布请求事件处理代码所示。

4.6订阅请求事件处理模块

订阅请求事件处理主要处理Watcher(观察者)的订阅请求,把请求信息存储在订阅链表中,当订阅链表中的群组用户信息发生改变时,监视群组信息更新进程将根据订阅链表中的信息通知订阅的Presentity。Subscribe(订阅)请求事件处理代码主要实现代码如下所示。

4.7信息更新线程监视模块

Presence信息更新线程监视模块主要功能是在一定时间间隔遍历一次订阅链表中群组用户的Presence信息,监视Pres-enee信息是否更新,如果更新则发送NOTIFY消息给订阅了该群组用户Presence信息的Watcher。信息更新线程监视模块功能代码如下所示:

5.结束语

本系统在实现过程中采用多进程设计实现,使用管道进行进程间通信。同时采用了多线程设计从而进一步提高资源利用率及系统运行效率。系统间数据传输的消息体采用标准的XML格式描述,提高系统的实用性。由于SIP协议的影响深远,基于SIP协议的系统实现使本系统生命周期更长久。