0.5.x与0.6.x的差异 在线文档

FastDo是一个强大的C++跨平台开发库,能助您快速的开发服务端程序,Web应用及网页。

0.5.x与0.6.x的差异

0.6.x作为一个重大更新版本,在很多方面已与0.5.x版不同,本文档将列出一些重要的不同,以供参考。

1. Web依赖库改变

在0.5.x版及以前,Web相关的功能一直由fcgiplus库提供。这样做其实不是太好,因为除了fcgi方式外,还可以以http方式,或者cgi的方式运行web。因此,0.6.x版利用OOP的设计思想对其进行了抽象,统一了RequestResponseApp的基础实现。现在,可以在页面逻辑代码(*.do文件)不变的情况下,采取不同的方式执行网页逻辑。因此,原本的fcgiplus库被废弃,取而代之的是eienwebx库。

2. 多线程化的改造

在0.5.x版及以前,FastDo常驻程序(FastCGI方式)是以单线程多进程的方式运行的。0.6.x版本则进行了多线程化潜力改造,虽然webx_fcgiserv(FastCGI方式的常驻程序)暂时仍然以单线程多进程的方式运行。但webx_httpserv(HTTP方式的常驻程序)则是以多线程的方式运行(未来将改为多线程多进程的方式)。

多线程化改造后,有些以前的老设计就显得不是那么合理,0.6.x版本都对其进行了改变。

2-1. 放弃cout重定向

在0.5.x版及以前,FastDo会重定向cout,使得可使用cout输出网页内容。0.6.x版本多线程化改造后,这个特性被废弃。因为cout只有一份,如果还要保留这个特性,则需要加锁使用cout,得不偿失。取而代之的是用Response进行输出:RSP << ...RSP.echo()RSP.printf()

2-2. 放弃设置*.do文件目录为工作目录

在0.5.x版及以前,FastDo会设置请求的*.do文件目录作为工作目录,使得do中的文件路径都是相对于do文件的。0.6.x版本多线程化改造后,这个特性被废弃。因为工作目录只有一份,根本无法保留这个特性。取而代之的是Request对象的属性REQ.doDirPath与方法REQ.realPath()。通过REQ.doDirPath + filenameREQ.realPath(filename)可以使文件相对于请求的do文件。

3. 一些常用API的变化
3-1. DateTimeL构造函数改变

在0.5.x版及以前,DateTimeL可以直接DateTimeL(1512345678)DateTimeL(1512345678000)这样构造。0.6.x版改为DateTimeL( DateTimeL::Second(1512345678) )DateTimeL( DateTimeL::MilliSec(1512345678000) )。如果是具名的变量,为防止编译器识别成函数,需要由DateTimeL mydt( DateTimeL::Second(1512345678) )改成DateTimeL mydt = DateTimeL::Second(1512345678),毫秒的也一样。

3-2. Session构造函数参数次序以及默认值改变

在0.5.x版及以前,Session构造函数为

Session( Request & req, String const & sessid = "", uint cookieSessIdLifeTime = 0, uint sessionLifeTime = 0, String const & cookiesPath = "" )
。0.6.x版改为
Session( Request & req, String const & sessid = "", String const & cookiesPath = "/", uint cookieSessIdLifeTime = 0, uint sessionLifeTime = 0 )