highpower edited this page Sep 13, 2010 · 10 revisions
Clone this wiki locally

xiva (acronym for HTTP Extended EVent Automata) is a simple HTTP server that notifies the browser about events on the server-side. It’s a framework that helps to create this type of servers also. It was developed in Yandex to work with real-time events like update of news, weather or traffic informers.

xiva is fully implemented in C++ and could be deployed as a standalone executable (xiva-daemon) as well as in a form of library integrated into another software system. This implementation has a lot of C++ template code and many other details, which are insulated from the library user. So the binary incompatibility caused by changes of implementation (not in the interface) is unlikely to happen. There are also bindings to Python language.

Technically, xiva core is a reactor-based web-server that

  • reads and parses a user request (only GET method currently is allowed)
  • authorises a user (if applicable). Comprehensive manual can be found here.
  • holds a persistent http- or websockets-connection, that events assigned to the particular user are serialised to.

xiva API consists of some C++ abstract classes that user have to implement to get specific behavior.

Although we tried to make the deployment as easy as possible, xiva has quite a few external dependencies. At first, it heavily depends of boost and asio. More than this, its key functions are build on top of these libraries. boost-1.42.0 (with its internal asio) as well as boost-1.34.1 with non-boost asio-1.4.1 are known to work. xiva-daemon also requires libxml2.

We have successfully compiled xiva with gcc-4.1, gcc-4.4, gcc-3.4 and icc-10. gcc versions older than 3.4 are supposed to fail because of lot of template code.

While xiva can potentially work on FreeBSD, most Linux distributions and on other POSIX platform, we have tested xiva only on Linux. The list of platforms that are known to compile and work can be found here.

also, Xiva is the city in the middle Asia.