FastDo是一个强大的C++跨平台开发库,能助您快速的开发服务端程序,Web应用及网页。
0.6.x作为一个重大更新版本,在很多方面已与0.5.x版不同,本文档将列出一些重要的不同,以供参考。
在0.5.x版及以前,Web相关的功能一直由fcgiplus
库提供。这样做其实不是太好,因为除了fcgi方式外,还可以以http方式,或者cgi的方式运行web。因此,0.6.x版利用OOP的设计思想对其进行了抽象,统一了Request
、Response
、App
的基础实现。现在,可以在页面逻辑代码(*.do文件)不变的情况下,采取不同的方式执行网页逻辑。因此,原本的fcgiplus
库被废弃,取而代之的是eienwebx
库。
在0.5.x版及以前,FastDo常驻程序(FastCGI方式)是以单线程多进程的方式运行的。0.6.x版本则进行了多线程化潜力改造,虽然webx_fcgiserv
(FastCGI方式的常驻程序)暂时仍然以单线程多进程的方式运行。但webx_httpserv
(HTTP方式的常驻程序)则是以多线程的方式运行(未来将改为多线程多进程的方式)。
多线程化改造后,有些以前的老设计就显得不是那么合理,0.6.x版本都对其进行了改变。
在0.5.x版及以前,FastDo会重定向cout
,使得可使用cout输出网页内容。0.6.x版本多线程化改造后,这个特性被废弃。因为cout
只有一份,如果还要保留这个特性,则需要加锁使用cout
,得不偿失。取而代之的是用Response
进行输出:RSP << ...
,RSP.echo()
,RSP.printf()
。
在0.5.x版及以前,FastDo会设置请求的*.do文件目录作为工作目录,使得do中的文件路径都是相对于do文件的。0.6.x版本多线程化改造后,这个特性被废弃。因为工作目录只有一份,根本无法保留这个特性。取而代之的是Request
对象的属性REQ.doDirPath
与方法REQ.realPath()
。通过REQ.doDirPath + filename
或REQ.realPath(filename)
可以使文件相对于请求的do文件。
在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)
,毫秒的也一样。
在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 )。