Liberty 上的会话启动协议 (SIP) 应用程序
SIP 应用程序是一个至少使用了一个会话启动协议 (SIP) Servlet 的 Java 程序。
SIP Servlet 是由 SIP Servlet 容器管理的 Java™ 应用程序组件,用于执行 SIP 信号发送。与其他 Java 组件一样,servlet 是独立于平台的 Java 类,它们编译为独立于平台的字节码,可动态装入到支持 Java 的 SIP 应用程序服务器(例如,Liberty 服务器),并可由该应用程序服务器运行。容器(有时称为 Servlet 引擎)是用来处理 Servlet 交互的服务器扩展。SIP Servlet 通过 Servlet 容器与客户机交换请求和响应消息,从而实现与客户机的交互。
SIP 可用来建立、修改和终止多媒体 IP 会话(包括 IP 电话、用户状态和即时消息传递)。在此上下文中,“用户状态”是指诸如“联机”、“离开”或“请勿打扰”之类的用户状态。定义用于编写基于 SIP 的 Servlet 应用程序的编程模型的标准是 JSR 289。该规范的基本思想是,提供一个与 HTTP Servlet 类似的 Java 应用程序编程接口 (API),从而提供一个易于使用的 SIP 编程模型。与 HTTP Servlet 编程模型一样,有些灵活性仅限于优化易用性和时间价值比。
但是,由于协议差别很大,因此 SIP Servlet API 在许多方面都与 HTTP Servlet 不同。虽然 SIP 是请求/响应协议,但每个请求并不一定只有一个响应。这种复杂性以及对高效解决方案的需求意味着更容易实现 SPI Servlet 本机异步执行。而且,与 HTTP servlet 不同,SIP Servlet 的编程模型力求简化创建客户机请求和其他逻辑的过程,因为许多应用程序充当其他服务器/代理的客户机或代理。
SipServlet 请求
SIP Servlet 与 HTTP Servlet 有相同点,就是每个 SIP Servlet 都扩展一个基本 javax.servlet.sip.SipServlet 类。所有消息都通过服务方法传入,您可以扩展该服务方法。但是,因为 SIP 中不存在请求与响应的一对一映射,所以建议的做法是改为扩展 doRequest 或 doResponse 方法。扩展 doRequest 或 doResponse 方法时,一定要调用经过扩展的方法才能完成处理。
规范必须支持的每个请求方法都有一个 doxxx 方法,这点类似于 HTTP。在 HTTP 中,GET 和 POST 请求具有类似于 doGet 和 doPost 的方法。在 SIP 中,每个 SIP 请求方法都具有 doInvite、doAck、doOptions、doBye、doCancel、doRegister、doSubscribe、doNotify、doMessage、doInfo 和 doPrack 方法。
与 HTTP Servlet 不同,SIP Servlet 对于支持的每种响应类型都有一些方法。因此,SIP Servlet 包括 doProvisionalResponse、doSuccessResponse、doRedirectResponse 和 doErrorResponse 响应。确切地说,临时响应(1xx 响应)用于指示状态,成功响应(2xx 响应)用于指示成功完成事务,重定向响应(3xx 响应)用于将客户机重定向至已移动的资源或实体,而错误响应(4xx、5xx 和 6xx 响应)用于指示故障或特定错误情况。这些类型的响应消息与 HTTP 类似,但由于 SIP Servlet 编程模型包括客户机编程模型,所以还需要以编程方式处理响应。