如何实现一种简单的、全新的服务器页面脚本?

bluesen 2007-08-23 09:52:09
缘起: 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

...全文
190 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
xyzxyz1111 2007-08-24
  • 打赏
  • 举报
回复
很好,因此转移到Web开发的版块里, 相信这里的朋友会更喜欢:)
iambic 2007-08-23
  • 打赏
  • 举报
回复
>>web服务器的脚本很多,如PHP就很好,ASP.NET也不错,JSP甚至现在流行的RoR,
>>都有很多成熟的应用。
>>但KSP比他们简单,简单就是最大的优势。你不用学习和理解面向对象的概念,
>>语法上也很简单,比如变量不用像PHP那样要在前面弄个美元符号,字符串拼接也直接用加号。
>>此外很多朋友已经熟悉Koodoo语言了,驾轻就熟,
>>做一些简单的业务开发没必要再用其他的工具。

我没听说过koodoo语言。至于说它简单,一点也没看出来啊……
你的Web服务器和应用到底能够支持多少并发用户访问?在出现大量并发请求的情况下,软件会出现问题吗?这些问题靠通常的测试手段是无法解答的。本文介绍 了Microsoft为这个目的而提供的免费工具WAS及其用法。另外,本文介绍了一种Web应用的性能优化方法,并利用WAS测试了它的性能改善程度。 随着服务器端处理任务的日益复杂以及网站访问量的迅速增长,服务器性能的优化也成了非常迫切的任务。在优化之前,最好能够测试一下不同条件下服务器的性能表现。找出性能瓶颈所在是设计性能改善方案之前的一个至关紧要的步骤。    本文介绍Microsoft的Web Application Stress Tool(WAS,Web应用负载测试工具)在Web服务器性能测试中的应用(注:Stress基本含义为“重压;压力”等,本文称之为“负载”)。另 外,我们还将通过WAS评估一种相对简单的网站性能改善方法,这种方法的基本思想是在服务器上生成静态的HTML页面、避免过多的数据库调用。   负载测试是任何Web应用的开发周期中一个重要的步骤。如果你在构造一个为大量用户服务的应用,搞清楚你的产品配置能够承受多大的负载非常重要。如果你在构造一个小型的Intranet网站,测试能够暴露出最终会导致服务器崩溃的内存漏洞以及竞争情况。 无论是哪种情形,花些时间对应用进行负载测试可以获得重要的基准性能数据,为未来的代码优化、硬件配置以及系统软件升级带来方便。即使经费有限的开发组 织也可以对它们的网站进行负载测试,因为Microsoft的WAS是可以免费下载的。WAS要求Windows NT 4.0 SP4或者更高,或者Windows 2000。为了对网站进行负载测试,WAS可以通过一台或者多台客户机模拟大量用户的活动。WAS支持身份验证、加密和Cookies,也能够模拟各种浏 览器类型和Modem速度,它的功能和性能可以与数万美元的产品相媲美。如果你对WAS和Microsoft的另外一个测试工具Web Capacity Analysis Tool (WCAT)之间的差别感兴趣,可以访问Microsoft Web工具的比较页面。 要对网 站进行负载测试首先必须创建WAS脚本模拟用户活动。我们可以用下面四种方法之一创建脚本:通过记录浏览器的活动;通过导入IIS日志;通过把WAS指向 Web网站的内容;或者手工制作。图1所显示的是通过记录浏览器事件生成的脚本的一部分,网站是Microsoft的Duwamish Book Store。Duwamish是Microsoft开发的电子商务Web应用示例,从Duwamish网站的“Phase 4”链接可以下载这个软件包。下载包中包含了它自己的WAS测试脚本

10,612

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 其他
社区管理员
  • 其他
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧