PHP的多線程應用服務器:appserver

jopen 11年前發布 | 16K 次閱讀 appserver 應用服務器

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());
}

項目主頁:http://www.baiduhome.net/lib/view/home/1395730092197

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!