Skip to main content

The State of 4N/WebSockets and NodeJS Hosting

4N + WebSockets

For anyone that wants to develop on a 4N (Not Windows, nginx, NodeJS, NoSQL) stack, I've come up with a list of gotchas that you will eventually run into when developing your applications.

nginx does not support web sockets

If you're building an application that will require WebSockts for full duplex bi-directional communication between the client and the server, you're sore out of luck as nginx doesn't support the WebSockets protocol (ws:// for normal, wss:// for secure) yet as of September 2010. Based on the discussions on the NodeJS Google Group, some have gone out to say that NodeJS shouldn't be out in the front. For clarification, nginx is a battle-tested Russian event driven web server that powers high traffic sites like Wordpress, Hulu, Github, and SourceForge. By using a single master process, it is able to easily handle 10s of thousands requests by delegating to worker processes. Each worker handles multiple requests in an event-driven or asynchronous manner using special functionality from the Linux kernel (epoll/select/poll).

Furthermore, NodeJS is also event driven and is powered by the non-blocking beating drum of an extremely fast event loop. As many of you know, NodeJS is a platform on top of Google's V8 engine that allows developers to write server side Javascript and build powerful, scalable networking applications.

npm versions aren't excalibur swords--Learn how to hack together a solution

As I understand it, a lot of developers trying out NodeJS are Rails enthusiasts that are open-eyed, wanting to explore the vast world of server-side Javascript. I could be completely wrong here about the demographic but one thing I do know is that "npm install ..." is not as reliable as "gem install ..."

For example, while trying to build an MMO pokemon card game on the iPad for NodeJS, I couldn't figure out why Sockets.IO wasn't working until I realized that the repository on github had fixes that npm's repository didn't. The quick fix? Hack it up! I merged the code from 'master' on github into /usr/local/lib/node/.npm/socket.io/0.5.3/package and it was smooth sailing from there. I notified the author of the library, he was gracious enough to inform me that it's already fixed in the upcoming code push to npm. Be warned--you will need to figure out some of these little things!

You may need to migrate to MongoDB, CouchDB, or MySQL (async driver)

If you're thinking about a rewrite of your application, you probably understand that your application will probably be the easiest part of the migration over to the NodeJS platform (it's just Javascript). The most difficult part in my opinion would be if you're migrating your data from an existing relational database. I would definitely not suggest that at all--What I do suggest is to migrate some of your frequently hit pieces of data (news, forum posts, etc) and have those migrated over...Or just not migrate your data if you're on MySQL/Postgres as there are an asynchronous drivers. If you're coming from Oracle, good luck.

NodeJS Hosting

- Gandi
- Joyent
- Heroku

Special Links of NodeJS Adoption

- THQ Selects Joyent To Provide Social Networking Infrastructure To Enable Rapid Prototyping And Deployment of Online Games
- Palm brings improved multi-tasking and NodeJS to webOS 2.0
- Plurk: Instant conversations using Comet
- Heroku adds NodeJS support
Post a Comment

Popular posts from this blog

TextMate Tutorial: How to add a Strikethrough keybind to your Markdown bundle

Markdown is awesome for quickly generating Readme's on Github. After looking at other projects using the strike tag, I've decided to create a custom keybind for it in my TextMate Markdown bundle. Here's how:

1) Click the + sign on the bottom left and click New Command.
2) Paste this into the editbox and make sure you name your command "Strikethrough".

For the input field, select WORD in the drop down.
For the output field, select "insert as snippet".
As for the keybind, you can totally map it to whatever you're comfortable with but I chose Command-D as it is the same thing in Microsoft Word.

Cheers,
Jaime

Using Git Hooks: Prepare Commit Message to automatically prepend branch names on commit messages

When you're practicing branch by feature with distributed version control, typically you'll get assigned a ticket or issue and that ends up being your feature branch. Instead of always typing in the branch name in every commit, you can edit your Git hooks (specifically prepare-commit-msg).

Assuming that this is a brand new git repository:

mv .git/hooks/prepare-commit-msg.sample .git/hooks/prepare-commit-msg
vi .git/hooks/prepare-commit-msg

Edit the file by commenting out what was originally in the file and then add this:



Now, whenever you make a commit, it should show up like this in the log:



Since GitHub and Bitbucket both support Emojis inside commit messages, you can do something cute like this



Want more emojis? check out the Emoji Mardown Cheatsheet!

NodeJS Hack Session: MMO Pokemon with NodeJS/WebSockets

The primary focus of this proof of concept is to determine how easy it is to build real-time web applications for all iPad, iPhone, droids, Safari, Chrome users on top of NodeJS (non-blocking event driven server side Javascript platform). The proof of concept was built within 6-8 hours including the following:

Uses Express framework for server side Javascript development (inspired by Rails / Sinatra / Django)Uses EJS for templating language (much like Django templates and symfony) -- allows partials and passing parameters into partials like symfony PHPReal-time chat using WebSocketsArena Queueing System for real-time competitive matchplay using WebSocketsHTML5 AudioCSS3 transitions for all hand cards, tappable cards, transparent panels, rounded corners, drop shadowsFallbacks for Firefox, IEFirefox/IE will fall back to Flash socketIE will fall back to XHR long poll if the user doesn't have Flash installedNoSQL CouchDB for fetching users and soon cards, achievements, friend associat…