这个类封装咯一个应用服务器。
这个服务器类代表一个应用服务器的一个实例。
它提供对于多个应用入口的支持,以及对于启动和终止服务器的控制 。可以在以下情况下用这个来代替 WRun() :你想要支持多个应用入口 ;或者将一个Wt (独立的网页服务器 ( httpd ) )服务器程序整合到一个已有的应用中去,因为你可以控制服务器的启动和停止。
作为一个使用的示例,看看 WRun() 的实现 ,它启动一个服务器 并且等待 ,直到发生以下事情之一:用户按咯Ctrl-C;接收到一个终止信号 ;使用SIGHUP 而发出的重启指示 ;二进制程序文件 (argv[0]) 发生变化 :
int WRun(int argc, char *argv[], ApplicationCreator createApplication)
{
try {
//使用argv[0]作为应用名字来匹配Wt 配置文件中的适当入口,
//并且使用默认的配置文件
//(除非设置咯WT_CONFIG_XML 环境变量 ,否则使用默认的/etc/wt/wt_config.xml )
WServer server(argv[0]);
//比如说,WTHTTP_CONFIGURATION是"/etc/wt/wthttpd"
server.setServerConfiguration(argc, argv, WTHTTP_CONFIGURATION);
//在默认位置(由服务器配置文件的deploy-path 决定)添加一个单一的入口
server.addEntryPoint(Wt::Application, createApplication);
if (server.start()) {
int sig = WServer::waitForShutdown(argv[0]);
std::cerr << "Shutdown (signal = " << sig << ")" << std::endl;
server.stop();
if (sig == SIGHUP)
WServer::restart(argc, argv, environ);
}
} catch (WServer::Exception& e) {
std::cerr << e.what() << "n";
return 1;
} catch (std::exception& e) {
std::cerr << "exception: " << e.what() << "n";
return 1;
}
}
注意 :
当前,只能创建一个服务器实例。我们计划在未来去掉这个限制。
virtual void Wt::WServer::post |
( |
const std::string & |
sessionId, |
|
|
const boost::function< void()> & |
function |
|
) |
|
[虚函数] |
将一个函数传递到一个会话中。
这是一个线程安全的传递一个特定的 (实现成咯一个函数对象的) 事件 到 由 WApplication::sessionId() 指定的会话的上下文中去运行的方法。这个方法会安全地处理会话正在被终止的情况,并且被取得会话的锁 ,以便在会话 ( WApplication::instance() 要指向正确的应用程序) 的上下文中执行这个函数 ,就像是由浏览器发出的请求引起的一样 。一般情况下 ,你还会想要使用服务器端发起的更新 ( WApplication::triggerUpdate() )来将变化情况推送到客户端 。
这个方法会立即返回,而那个函数会在处理网页请求的线程池里运行。通过这种方式,它避免咯死锁。
这为那种在会话的事件循环之外抓取一个应用的更新锁以直接将变化情况推送到一个会话中的方式提供咯一个很好的替代方案。
HxLauncher: Launch Android applications by voice commands