Back-end and storage
Collaboration will be an important feature of my application. To enable users to work together as effectively as possible, communication between users must be as fluid and uninterrupted as possible. Traditional HTTP requests do not lend themselves well to this as they handle requests by providing a response to the request and then closing the connection. Each page loaded from or chat message sent to the server has to be accompanied with header information which varies from ~200 bytes to over 2kb, according to Google’s SPDY research whitepaper. Websockets send headers when establishing a connection and then keep the connection alive allowing subsequent requests allowing them to be transferred with minimal overhead.
Node.js is “ a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network applications”. Node can be used to deploy javascript as a standalone application to perform routine tasks and act as an http server and handle websocket connections.
Express is a framework for node which provides a set of extended features for Node such as routing to handle incomming requests to the server and direct them based on url or post data.
MongoDB is a NoSQL database which stores records as “documents” rather than table entries used in SQL storage which means that more complex objects can be stored and data such as comments can be stored as an array of objects attached to their subject rather than requiring an entirely new table.
Jade is an HTML templating engine which provides a cleaner syntax for writing html and allows variables to be embedded directly without having to mix languages such as embedding php tags inside html.
These technologies are known to work well together and comprise most of the MEAN (MongoDB, Express, Angular, Node) stack. While I’m still unsure of how i’m going to handle the finer points of the front end interface, I’m leaning towards Angular as its two-way data binding sounds interesting.