在你的程序中,例如在你的main()中,你应当执行 WRun() 来启动Wt 程序服务器。在以下条件下 ,这个方法才会返回:环境已经发出信号 要求关闭,并且在这个程序服务器 (以及所有剩余的活动会话)已经正确的关闭了之后。 WRun() 函数的其中一个参数就是一个 createApplication 函数对象。另外,如果你想对程序服务器进行更有力的控制 ,那么你还可以直接实例化并且配置一个 WServer 实例。
对每个新的会话(对应于一个新的访问你的网页程序的用户),这个库都会调用你的createApplication 回调函数来为那个会话创建一个新的 WApplication 对象。那些请求参数 (作为 WEnvironment 对象的一部分)被传递给这个createApplication 函数,可以被用来对程序进行自定义以及对用户进行认证 。参见 6. 程序启动 ,以了解更多关于程序启动方法的信息 。
在任何时候,都可以使用静态方法WApplication::instance()来访问当前的WApplication 实例,并且:检查启动参数和设置 (使用 WApplication::environment() )、设置或者修改程序标题 ( WApplication::setTitle() )、指定一个用于渲染的区域信息 ( WApplication::setLocale() )、以及处理其它的程序层面的设置信息 。在一个多线程的环境中 ,对这个实例的访问是使用线程的本地存储来实现的 。
遇有以下情况之一,则一个会话中止:用户通过浏览器离开这个程序 、 WApplication::quit() 被调用 、或者程序服务器被关闭 。在任一种情况下 ,那个会话中的程序对象以及整个部件树都会先被适当地删除 。所以 ,你应当在这些对象的析构函数里释放由你的部件或者程序占有的资源。
这个库提供咯2种不同的将会话映射到进程上的机制: 独立进程(只适用于FastCGI 部署模式)和共享进程 。第一种机制为每个单独的会话都创建一个独立进程。这样就为不同的会话提供咯内核级的分离 ,这对于安全性要求非常高的程序来说是有用的 。第二种机制会生出一堆进程 ,将新的会话随机分配给其中之一 (当使用内置的httpd 时 ,只使用 1个进程 )。这样就减少咯拒绝服务式攻击的危险 ,但是要求你在编程的时候要更加小心 ,因为:内存错误会影响单个进程中的全部会话 、而且会话是仅仅依靠正确的编程来实现分离的 。
这些选项是与会话管理有关的,它们在 <session-management> 小节中指定 。
dedicated-process
每个会话都被映射到一个独立进程中,这样能允许最大化的会话分离
,但是维持会话的代价变大咯
。
仅在使用FastCGI 连接器的时候才被支持。
shared-process
那些会话共享固定数量的一些进程,这样会付出较低的会话开销。
这是Wthttpd 连接器的唯一选项。
tracking
会话是如何被跟踪的:自动 (在可以的时候使用cookies ,否则使用 URL 重写 )或者严格的URL 重写(允许来自单个用户的多个并行会话)。
reload-is-new-session
在浏览器上进行的刷新动作应当是生出一个新的会话(方便调试)还是简单地(使用 WApplication::refresh() )刷新当前会话?这个设置可能会对显示的URL 有暗示 (implications),因为在URL 中需要会话信息以便处理当前会话中的刷新 。
timeout
在探测一个空闲会话时的超时时间(以秒为单位)。一个Wt程序使用保持连接(keep-alive)消息,只要用户还在访问这个网页 ,那么就保持会话的存在。增加这个数字的话 ,就会导致保持连接消息之间的时间间隔增大 ;但是同时也会导致要在更长时间的延迟之后才探测到已经终止的会话,这样就会导致平均有更多的无用会话被保留在内存中 。
HxLauncher: Launch Android applications by voice commands