如何实现一种简单的、全新的服务器页面脚本? - Web 开发 / 其他
缘起: KSP是什么?
KSP是Koodoo语言服务器页面脚本(Koodoo Server Page)的简称,我们知道Koodoo语言是运行在蓝星际语音平台上,用来开发语音IVR或呼叫中心流程的高级脚本语言,直接被语音平台加载运行在线路上。而KSP却是把Koodoo语言嵌入在HTML页面上,就像ASP、JSP或PHP一样,可以用来实现基于Web应用的业务逻辑。
我们知道,运行ASP需要IIS,PHP需要Apache,JSP则需要Java的应用服务器,那么运行KSP的web服务器是什么?
其实就是蓝星际语音平台,当然,还需要在虚拟线路上加载处理页面的脚本,具体在后面“怎么部署”详细讲述。
这是一段最简单的KSP页面(文件名Hello.ksp):
<html>
<head>
<title> KSP 测试 </title>
</head>
<body>
<p> Hello World </p>
<%
Print( " <p> Hello, KSP! </p> ");
// 下面显示当前时间
s = " ";
GetDateStr( " <p> 格林维茨时间: %a, %d %b %Y %T GMT </p> ", NULL, true, s);
Print(s); // 将变量s输出到浏览器页面
%>
</body>
</html>
如果运行起了语音平台后,在浏览器的地址栏输入: http://localhost:8081/hello.ksp, 将会显示:
Hello World
Hello, KSP!
格林维茨时间: Tue, 21 Aug 2007 09:06:21 GMT
这看起来多么简单,和其它脚本语言一样,KSP只是在普通的HTML或XHTML文件中用 <% ... %> 括起来的部分,Print(s)函数会将变量输出到浏览器页面上。
服务器脚本够多了,为什么还要KSP?
web服务器的脚本很多,如PHP就很好,ASP.NET也不错,JSP甚至现在流行的RoR,都有很多成熟的应用。
但KSP比他们简单,简单就是最大的优势。你不用学习和理解面向对象的概念,语法上也很简单,比如变量不用像PHP那样要在前面弄个美元符号,字符串拼接也直接用加号。此外很多朋友已经熟悉Koodoo语言了,驾轻就熟,做一些简单的业务开发没必要再用其他的工具。
KSP就运行在蓝星际语音平台上面,只是多配置几条虚拟线路来跑Web服务器而已,和语音平台紧密集成,你可以通过浏览器来直接查询甚至控制语音平台。从某种意义上,相当于多了一个和语音平台打交道的接口。
因为KSP基于Koodoo语言,所以继承了Koodoo语言的灵活性,比如,可以利用文本转语音的函数进行实时转换并下载,可以实时传真转换并发送传真,可以利用DLL来进行短信收发,可以给其它线路发送消息等等。
怎么部署?
点击下面的链接下载:最新的蓝星际语音平台之开发平台 或 最新的蓝星际语音平台之运行平台
点击下面的链接下载:web服务器脚本
服务器脚本下载到本地目录后,按目录解包,将语音平台(开发平台或运行平台)程序拷贝到该工作目录。
1.如果你有运行平台许可,则简单配置好BsTelRun.cfg文件后,直接运行运行平台程序就可以了。
2.如果用开发平台来进行测试,则运行开发平台程序,选择HttpServer.bss脚本,编译,运行,为了加快速度,
去掉界面上的 "动态刷新 "。
注意,运行平台采用多线程方式响应浏览器的请求,有更好的性能;开发平台则采用堵塞方式运行,完成一个请求后才能
响应下一个请求,但你一个人测试就没有问题。
工作目录下有个web.ini文件,是个简单的配置文件,只有几行:
const WEB_PORT = 8081; // 本web服务器侦听的端口号, 为了不和标准web服务器的80端口冲突,设置为8081
const BASE_HTM_PATH = "./Ksp/ "; // 首页路径,.htm或.ksp文件放在这个目录下面,可以有子目录
const TEMP_FILE_PATH = "tmp/ "; // 临时文件路径, 必须预先创建
运行起来后,就像前面所说的,在浏览器的地址栏上输入http://localhost:8081/hello.ksp,就可以看到结果了。
解说一下: 用一百多行Koodoo代码如何实现一个功能强大的Web服务器?
其实要做一个web服务器比想像的简单,用Koodoo语言来实现就更简单了。
你可以用记事本打开HttpServer.bss脚本, 运行平台使用HttpServerCtrl.bss和HttpServerProc.bss,前者是主控脚本,运行在一条虚拟线路上,接受浏览器的Http连接;后者分解请求并进行处理然后发送Http响应,可配置在多条虚拟线路上运行。
脚本很简单,总共只有将近200行代码:
1.在脚本的开始,用系统函数HttpServerOpen()侦听WEB_PORT端口;
2.用系统函数HttpServerRecv()函数接收浏览器的请求;
3.调用自定义函数ProceData()处理请求的数据,在函数内会调用系统函数HttpServerSend()给浏览器发送响应数据;
4.循环2,3
自定义函数ProceData()是数据处理的关键:
1.分解请求头,取得Get、Post、Cookie等数据;
2.如果不是.ksp脚本,如普通的.htm或jpg图片等,直接打开文件发送给浏览器;
3.如果是.ksp脚本请求,则调用KspToBss()系统函数,将Ksp脚本分解为标准Koodoo语言的Bss脚本,
然后调用系统函数RunBss()执行之; 将执行脚本所生成的htm文件发送给浏览器。
这一切,都在HttpServer.bss脚本中写的明明白白,你可以自己阅读或者修改它,来适应你自己的特殊需求。你可以定制一个Web服务器,这一切都是透明的,不是吗?
怎么用KSP?
KSP就是嵌入式的Koodoo语言,比Asp和PHP都要简单,更不用说Jsp了。
浏览器可以用Get参数或Post方法给KSP传递数据,这些存储在全局数组里面:
_GET // 用Get方法发送给服务器的数据
_POST // 用Post方法发送给服务器的数据
_COOKIE // 包含在客户计算机上的Cookie中的数据
这些数组可以用类似for( name in _POST )的方法遍历,也可以用下标直接访问,非常方便。
关于Cookie:
Cookie可以保存用户的信息,首先要设置它,KSP没有提供系统函数,你可以用下面的自定义函数来完成:
_headStr = " "; // 定义一个全局变量
// 自定义函数,设置一个Cookie
// 参数: name - cookie名字
// val - coocie的值
// expires - 有效时间,如传入NULL,表示不指定,关闭浏览器后自动失效
// path - coockie的有效范围
function SetCookie(name, val, expires, path)
{
vStr = " ";
StrToUnicode(val, 3, vStr);
expStr = " ";
if( expires!=NULL )
GetDateStr( "expires=%a, %d-%b-%Y %T GMT; ", expires, true, expStr);
pStr = " ";
if( path!=NULL || path!= " " )
pStr = "path= "+path;
_headStr = _headStr + "Set-Cookie: " + name + "= " + vStr + "; " + expStr + "\r\n ";
SetShareMem(_lineNo, "_RawHead ", _headStr);
}
// 试验一下
t = Time(); // 取得当前时间
SetCookie( "user_id ", "123456 ", t+3600, "/ "); // 有效期为一个小时
SetCookie( "user_pwd ", "189823 ", t+3600*24, "/ "); // 有效期为一天
SetCookie( "user_name ", "bluesen ", NULL, "/ "); // 有效期为本浏览器
在下一个页面中,则可以这样来取得Cookie数据:
userId = _COOKIE[ "user_id "]; // 这个值是上次设置的 "123456 "
userPwd = _COOKIE[ "user_pwd "]; // 这个值是上次设置的 "189823 "
... 然后到数据库进行身份校验。对_GET和_POST数据的处理是类似的。
你如果熟悉PHP,会发现KSP对Cookie的处理和PHP如出一辙,相当简单。
其实,KSP只需要处理业务逻辑,比如存取数据库,调用外部Dll函数,记录服务器日志,等等。界面的表现部分通常用XHTML+CSS来完成。足以简单而清晰地构建Web业务系统,尤其是和语音系统结合的web业务处理系统。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1753431
[解决办法]
> > web服务器的脚本很多,如PHP就很好,ASP.NET也不错,JSP甚至现在流行的RoR,
> > 都有很多成熟的应用。
> > 但KSP比他们简单,简单就是最大的优势。你不用学习和理解面向对象的概念,
> > 语法上也很简单,比如变量不用像PHP那样要在前面弄个美元符号,字符串拼接也直接用加号。
> > 此外很多朋友已经熟悉Koodoo语言了,驾轻就熟,
> > 做一些简单的业务开发没必要再用其他的工具。
我没听说过koodoo语言。至于说它简单,一点也没看出来啊……
[解决办法]
很好,因此转移到Web开发的版块里, 相信这里的朋友会更喜欢:)