# Community Edition (CE) ***
appserver.io 1.0.0 CE aka Iron Horse, is the first PHP Application Server, fully written in PHP. appserver.io is the first player in the market segment of infrastructure solutions, previously covered only by non PHP language tools. The LAMP stack, together with countless 3rd party tools, has, by now, been the backbone of millions of low and midrange web applications, e-commerce solutions and websites. With the growing market demand for making PHP ready for real enterprise solutions, the LAMP stack reaches its limits. Especially areas like maintainability and scalability are, compared to common solutions, bottlenecks the PHP ecosystem is responsible for finding working solutions for.
appserver.io exactly focuses that topics and enters the stage as a fully featured infrastructure solution that replaces the A and pulls the 3rd party tools out of the LAMP stack. Based on a fast and rock solid HTTP/1.1 compliant web server as the first layer, appserver.io provides a Persistence-Container and a Servlet-Engine as second. Finally the last layer is built by a Message-Queue and a Timer-Service which make heavy use of the Persistence-Container functionality. These, completely stateful, services are bundled with functionality like AOP, DI, Design by Contract and Annotations, which massively speed up application development, maintainability and reusability.
appserver.io CE is your entry into the new and amazing world of multithreading enabled PHP. If you are a passionate PHP developer, it offers you not yet known opportunities to build rapidly build enterprise-grade web applications. Feel free to modify - or even contribute to - one of the most innovative PHP projects of the last years!
Below, you can read more about the main services provided by the CE.
Provides a fully HTTP/1.1 compliant, component based webserver, which can process requests over HTTP as well as HTTPS. Basic functionality can be extended by the usage of completely independent, configurable modules interacting via module hooks with the request/response chain. With the bundled FastCGI module, knwon backends like PHP-FPM and HHVM can simply be configured to handle incoming requests.
The Rewrite-Engine is implemented as a webserver module and provides a module for rewriting URLs and redirecting requests by using classical regular expressions. Rules can be varied, nested and chained to even fulfill complex requirements. In addition, the rewrite engine also serves as a basis for complex rewrite maps which can be loaded from external datasources as e.g. databases.
The Servlet-Engine provides a web container that enables developers to load applications and objects, so-called servlets, on application server startup and hold them persistently in memory. Using servlets allows you to optimize your applications bootstrapping to take place at application servers startup time. As a result, the time to process requests can be significantly lowered comparing to applications running on the common LAMP stack.
The Persistence-Container enables developers to hold objects, so-called components, in memory whereby it is possible to define whether a component will be a singleton, bound to an HTTP session or has no state at all. In addition to that, the Persistence-Container allows you to make transparent use of components local or remote business interface. That enables application developers to implement independent, loosely coupled, maintainable and reusable components that can be distributed across a network without the need change any source code.
The Message-Queue provides services that enable developers to process messages asynchronously. Therefore messages, which are plain PHP objects, are stacked on the queue whereas receivers, represented by MessageDriven beans, consumes them in a chronological order. By prioritizing messages, software developers are enabled to optimize a system for optimal resource utilization.
The Timer-Service enables the execution of methods at a determined point of time whereby an execution in the range of seconds is possible. This allows a significant higher differentiation then services like CRON. In contrast to most available solutions, developers don’t have to configure scripts that’ll be executed, instead they configure methods of message driven, stateless or singleton session beans. Beside scheduled execution it is possible to create timers programmatically what allows you to invoke methods once or scheduled at a dedicated point of time in future.