实现移动服务的最热门技术是无线应用协议(Wireless Application Protocol,WAP)。用于 WAP 的开放源代码网关执行 Web 服务器与移动电话之间的协议转换,本文对它的优势进行了讨论。
WAP 网关的工作原理是,通过最优化的用于无线空中下载(wireless-over-the-air)的标记语言、脚本语言和传输协议,使电话成为一个简单的 Web 浏览器。它使用 WAP 协议栈与电话交流,并将它接收到的请求转化为普通的 HTTP。这样,内容提供者可以可以使用任何 HTTP 服务器并利用现有的关于 HTTP 服务实现与管理的知识。
除了协议的转换,网关还将 WML(无线标记语言,Wireless Markup Language)页压缩为更紧凑的格式,这样就节省了空中的带宽,并进一步地减少了电话处理的需求。它还将 WMLScript 程序编译为字节代码格式。
市场上有多种可用的商用 WAP 网关,价格昂贵。另一方面,Kannel 是一个开放源代码网关;您不需要为它付费,您可以自行编辑源代码,您还可以构造您自己的定制网关。由于 Kannel 是在 Linux 系统(RedHat 和 Debian)上开发,所以它可以平滑地移植到其他类 UNIX 操作系统。不过,在本文中,我只是展示了在这两种 Linux 系统上网关的构建。
Kannel 网关体系结构
网关将处理工作负载划分到下面两个位置:
信使单元(bearer box),它连接到 SMS(短消息服务)中心和 CSD(电路交换路数)路由器,为 wapbox 向它们提供一个统一的接口。信使单元通过实现 WAP 栈的 WDP(无线数据报协议,Wireless Datagram Protocol)层来完成这一工作。
wapbox,WAP 栈中更高的层位于这一单元。每个会话以及它们的事务都由同一个 wapbox 来处理。
系统工作方式
信使单元自 CSD 路由器接收到 UDP(用户数据报协议,User Datagram Protocol)数据包,检查它们是不是 WAP 数据包,然后将它们路由到 WAP 单元。这个简单的设计使得信使单元对每个数据包的处理最少。信使单元也发送其他单元生成的 UDP 数据包,这多少增加了一些路由处理。 wapbox 实现了 WTP(无线传输协议,Wireless Transaction Protocol)和 WSP(无线会话协议,Wireless Session Protocol)层。它们从电话取得类似于 HTTP 的请求,并将真正的 HTTP 请求发送到内容服务器,压缩响应,然后将它们发回到终端。(会话被保持,以尽可能限制无线带宽。)
基本的软件和硬件要求
在构造网关之前,您必须有以下基本条件:
C 编译器(CC 或 GCC),开发库和相关工具
Gnome XML 库(也叫 gnome-xml 和 libxml),版本 2.2.5 或更新
GNU Make
Posix 线程库(pthread.h)
构建网关
有两种途径可以构建网关。第一个途径是获得源代码,自己编译并安装它。第二个途径是得到预编译的二进制 RPM(RedHat 包管理器, Package Manager),然后安装。RPM 是一个设计用来编译和管理源代码和二进制软件包的程序。它也是可移植的,可以运行于不同的平台上。
首先,您需要通过 Kannel 的 Web 站点下载 Kannel 的源代码以进行安装。下载完成后,在命令行中输入下面的命令来编译源代码:
./configure
make
理想情况下,您将可以不出任何问题地编译代码。如果前面提到的库都存在,那么编译是很容易的。要安装网关,输入下面的命令: make bindir=/usr/local/bin install。
您可以将 /usr/local/bin 目录替换为网关将要安装到的任何路径。网关现在已经安装到了您的系统上。可执行文件现在可以在 /gw 目录下找到,名为 bearerbox、wapbox。
安装预编译的二进制
通过输入下面的命令来检查您的系统中是否已经安装了 libxml2 XML 库: rpm -q libxml2。
这个 XML 库是安装和编译网关所需要的。从网站上下载 Kannel 的二进制 RPM 文件。以 root 身体登录,输入下面的命令来进行安装。如果您有足够的权限,那么可能不需要进入超级用户模式。
rpm -ihv kannel_VERSION.i386.rpm
这样完成了安装。_VERSION 属性是 Kannel 二进制的版本数。
使用网关
现在来研究使用一个支持 WAP 的移动电话模拟器来使用和测试网关的基本步骤。本质上讲,您将涉及到 bearerbox 和 wapbox(您刚创建的可执行文件)。
配置网关
bearerbox 和 wapbox 是网关的主要工作模块,在配置网关之前必须得到配置。这两个模块由一个配置文件控制,其中有 wapbox 组和 bearerbox 组。
配置文件由成组的配置变量构成。组由空行隔开,每个变量在自己的行中定义(Kannel 配置中的每个组由组变量标识)。以井号(#)开头的行是注释,应该被忽略。
一个变量定义中有变量的名称、等号(=)和变量的值。变量名中可以有除了空格和等号以外的任何字符。变量的值是一个字符串,可以有引号,也可以没有引号。如果变量以空格开头或结尾,或者包含特殊字符,则需要使用引号。普通的 C 转义符在引号内有效。
使用配置文件
我引用了一个用于这个项目的配置文件的例子;它是网关运行所需要的基本文件。不过,还有一系列其他变量可以用来控制网关。您可以参考 Kannel 用户指南(User Guide)来了解它们。
清单 1. 网关的样例配置文件
#The sample.conf file which is the core configuration file
#for running the WAP Gateway
#Start of Configuration File
group = core
admin-port = 13000
admin-port-ssl = false
admin-password = rose123
status-password = rose123
admin-deny-ip = "205.158.62.76"
admin-allow-ip = "*.*.*.*"
wapbox-port = 13002
box-deny-ip = "205.158.62.76"
box-allow-ip = "*.*.*.*"
udp-deny-ip = "205.158.62.76"
udp-allow-ip = "*.*.*.*"
wdp-interface-name = "*"
log-file = "my_kannel.log"
log-level = 1
#The wapbox group for WAP gateway configuration
group = wapbox
bearerbox-host = localhost
timer-freq = 1
log-file = "my_wap.log"
log-level = 1
#End of Configuration File
理解样例配置文件中给出的各种属性
组中包含它所关联的组的 ID。如果 ID 是 core,则它是 bearbox 的配置;另外,wapbox ID 是代表 wapbox 配置。 admin-port 标识符指定了 HTTP 管理通过哪个端口完成。bearerbox 和 wapbox 组的其他各个属性的描述见表 2 和表 3。必选的域由 m 来表示,o 表示是可选的域,c 表示是有条件的域。
表 1. bearerbox 的配置文件属性变量 值 描述
表 2. wapbox 的配置文件属性
启动网关
一旦编译了 Kannel 并按您的规范编辑了配置文件,就可以进行最后一个步骤了。对于基本的工作,您可以拷贝并粘贴清单 1 中的文本,将其以任何名字保存,并用作您的配置文件。为了启动网关,您必须首先启动 bearerbox,然后再启动 wapbox。由于 bearerbox 是网关的基本部分,它必须要先启动。
通过下面的命令启动 bearerbox:./bearerbox -v 1 。
-v 1 将日志级别设置为 INFO。使用这一选项,您将不会看到大量的调试输出(默认是 DEBUG ),同时 conf_file 是您的 Kannel 所使用的配置文件的名字。基本的发行包附带了样例配置文件 wapkannel.conf(在 /gw 子目录下),用于构建 WAP Kannel。您可以编辑那些配置文件以构建您自己专门的系统。在信使单元之后,必须启动 wapbox。通过输入下面的命令启动它:./wapbox -v 1 。
要了解更多命令行选项,您必须回顾 Kannel 用户指南。
通过一个 HTTP 接口管理网关
可以通过一个 HTTP 接口管理 Kannel。所有的命令都作为 HTTP 请求给出,所以可以方便地通过命令行给出它们,比如这一个:
% lynx -dump http://localhost:12345/shutdown?password=bar
在上面的命令中,“12345”是配置文件中设置的 admin-port。对大部分命令来说,需要有一个 admin-password 作为参数,如这里所示。shutdown 用于关闭网关。其他可用的命令是:
Status,得到网关的当前状态。如果没有设置 status-password,那么不需要密码。
Suspend,设置 Kannel 为挂起状态。需要一个密码。
Resume,将 Kannel 的状态设置为运行。需要一个密码。
使用一个支持 WAP 的移动电话模拟器进行测试
我将给出一些简单步骤,以通过移动电话模拟器来测试网关并访问来自因特网的 WML 页。您需要有两台机器,一台运行 Windows 操作系统,另一台是 Linux 网关,最好用局域网连接起来。Linux 机器必须连接到因特网上,不管是直接的还是间接的。
您可以使用 Nokia 7210 Content Authoring SDK,它可以用于 Windows 系统。
将它安装到 Window 系统中。
做一些小小的配置,并将网关地址设置为运行着网关的 Linux 机器的 IP 地址。
现在在模拟器中输入提供 WML 页服务的 Web 站点地址,就大功告成了!
您一定能