|
| 1 | +# Elko |
| 2 | + |
| 3 | +### A server framework for stateful, sessionful applications in the web |
| 4 | + |
| 5 | +Elko is a Java-based server framework for building stateful, sessionful |
| 6 | +applications in the web. It is especially suited to applications that require |
| 7 | +realtime interaction among multiple clients, such as realtime text chat or |
| 8 | +multiplayer games, or that have a strong "push" component wherein the server |
| 9 | +needs to initiate much of the interaction, such as service monitors or realtime |
| 10 | +auctions. |
| 11 | + |
| 12 | +Much of the scalability of the web derives from the statelessness of the HTTP |
| 13 | +protocol and the consequent ease with which load may be distributed by simply |
| 14 | +replicating web servers. However, there remain a core of interesting and |
| 15 | +valuable interactive network applications that are fundamentally stateful, and |
| 16 | +trying to shoehorn these into the web paradigm can be awkward and frustrating. |
| 17 | + |
| 18 | +Elko is an application server framework designed to address this, enabling you |
| 19 | +to quickly and easily create applications that require a live, truly |
| 20 | +bidirectional dialog between client and server. |
| 21 | + |
| 22 | +Elko is highly scalable and very performant. We have successfully run |
| 23 | +configurations supporting upwards of 150,000 concurrently connected real-time |
| 24 | +users on a single AWS "large" server instance. |
| 25 | + |
| 26 | +## General Information |
| 27 | + |
| 28 | +This README describes Elko release 2.0.1, dated 23-February-2016. |
| 29 | + |
| 30 | +The authoritative source and documentation for Elko is maintained at: |
| 31 | + |
| 32 | +https://github.com/FUDCo/Elko (i.e., here) |
| 33 | + |
| 34 | +or |
| 35 | + |
| 36 | +http://elkoserver.org (which currently redirects to here) |
| 37 | + |
| 38 | + |
| 39 | +Background and theory are discussed in a series of three [Habitat |
| 40 | +Chronicles](http://habitatchronicles.com/) blog posts: |
| 41 | + |
| 42 | +* [Part I: The Life, Death, Life, Death, Life, Death, and Resurrection of The |
| 43 | +Elko Session |
| 44 | +Server](http://habitatchronicles.com/2009/09/elko-i-the-life-death-life-death-life-death-and-resurrection-of-the-elko-session-sever/) |
| 45 | + |
| 46 | +* [Part II: Against Statelessness (or, Everything Old Is New |
| 47 | +Again)](http://habitatchronicles.com/2009/09/elko-ii-against-statelessness-or-everything-old-is-new-again/) |
| 48 | + |
| 49 | +* [Part III: Scale |
| 50 | +Differently](http://habitatchronicles.com/2009/09/elko-iii-scale-differently/) |
| 51 | + |
| 52 | +Elko is open source software, under the MIT license. See the file LICENSE.md |
| 53 | + |
| 54 | +## What's Here |
| 55 | + |
| 56 | +* ServerCore -- contains the Elko server framework itself, along with its |
| 57 | + documentation. |
| 58 | + |
| 59 | +* Web -- contains client side JavaScript and HTML for interacting with Elko |
| 60 | + applications from a web browser. |
| 61 | + |
| 62 | +* Run -- contains a variety of shell scripts for running and managing various |
| 63 | + server farm configurations, as well as the beginnings of a web-based |
| 64 | + adminstration console (written in PHP). |
| 65 | + |
| 66 | +* ZeroMQ -- contains a pluggable extension that lets Elko servers talk to |
| 67 | + things using the [ZeroMQ](http://zeromq.org) distributed messaging framework. |
| 68 | + |
| 69 | +#### Building |
| 70 | + |
| 71 | +To build the Java code from the sources directly as is, you will also need the |
| 72 | +[jdep](http://www.fudco.com/software/jdep.html) utility and GNU Make. Jdep is |
| 73 | +currently hosted on my own website, but I hope to have it moved to GitHub |
| 74 | +shortly. I'll update this page when that happens. |
| 75 | + |
| 76 | +Note that most people doing Java development these days use one of the several |
| 77 | +popular Java IDEs and/or [Maven](https://maven.apache.org), but at the moment |
| 78 | +there's no support here for these; I'm an old time Unix/emacs guy and never had |
| 79 | +much use for such newfangled contraptions (especially Maven, yuck). However, |
| 80 | +the Java source tree is structured in the conventional way and the classes have |
| 81 | +few external dependencies outside the normal class libraries that are part of |
| 82 | +the standard JDK, so you should just be able to import the source tree into |
| 83 | +your favorite IDE and press the build button. |
| 84 | + |
| 85 | +Much more detail on building will be presented in an accompanying BUILD.md file |
| 86 | +when I get done writing it. |
| 87 | + |
| 88 | +All the Java code works on any standard, reasonably current JVM. The various |
| 89 | +shell scripts do assume a Unix shell environment, but Cygwin will suffice and |
| 90 | +they are not deeply essential anyway. |
| 91 | + |
| 92 | +#### Documentation |
| 93 | + |
| 94 | +Currently, documentation is in the ServerCore/doc directory. While extensive, |
| 95 | +it badly needs to be updated to be friendlier with the new GitHub environment. |
| 96 | +I also need to run JavaDoc on the code and find a home for the resulting web |
| 97 | +pages. However, if you run JavaDoc on the sources yourself, the resulting |
| 98 | +output is very usable -- the code is well documented in this regard. |
| 99 | + |
| 100 | +#### Binaries |
| 101 | + |
| 102 | +My goal is to eventually make precompiled .jar files available for this stuff. |
| 103 | +The appropriate manner for this to be hosted in the GitHub world is still |
| 104 | +something I haven't researched (I could just commit the .jar files to the repo, |
| 105 | +but that feels wrong). Once this gets resolved, this README will be updated |
| 106 | +accordingly. |
0 commit comments