PHP的多线程应用服务器:appserver
jopen
11年前
appserver.io 是一个采用PHP开发的多线程 PHP 应用服务器,实现真正多线程的 PHP 编程,高效安全而且快速,速度比基于 Nginx 的 Magento 标准安装要快 50%。使用上非常像 Java 的 Servlet。
亮点:
-
使用 Doctrine 作为标准的持久层
-
Session Beans (stateful, stateless + singleton)
-
Message Beans
-
Timer Service (tbd)
-
Servlet Engine
-
Integrated Message Queue
-
Easy scaling
-
Webservices
要求:
-
PHP 5.4+ on x64 or x86
-
ZTS enabled (thread safety)
-
POSIX threads implementation
-
Memcached (2.1+)
技术特性
- Usage of the phtreads PECL extension of Joe Watkins (https://github.com/krakjoe/pthreads)
- Supports usage of DI & AOP inside containers (tdb)
- Supports annotations to configure beans (tbd)
- Configration by exception, optional usage of deployment descriptors (tbd)
示例配置:
<servlet> <description><![CDATA[A demo servlet]]></description> <display-name>DemoServlet</display-name> <servlet-name>DemoServlet</servlet-name> <servlet-class>\TechDivision\Example\Servlets\DemoServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DemoServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
示例代码:
public function doGet(Request $req, Response $res) { // build path to template $pathToTemplate = $this->getServletConfig()->getWebappPath() . DIRECTORY_SEPARATOR . 'static' . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . 'layout.phtml'; // init template $template = new DemoTemplate($pathToTemplate); $baseUrl = '/'; // if the application has NOT been called over a //VHost configuration append application folder naem if (!$this->getServletConfig()->getApplication()->isVhostOf( $req->getServerName()) ) { $baseUrl .= $this->getServletConfig()->getApplication()->getName() . '/'; } // set vars in template $template->setBaseUrl($baseUrl); $template->setRequestUri($req->getUri()); $template->setUserAgent($req->getHeader("User-Agent")); $template->setWebappName($this->getServletConfig()->getApplication()->getName()); // set response content by render template $res->setContent($template->render()); }