Well I work for Microsoft, so you can only imagine my experience using Azure just cannot be bad ;). But seriously, there are several ways of running node.js code in Azure:
- you can own a VM (Windows or Linux), where you can listen on whatever TCP port you please and have the traffic load balanced between VMs that form a cluster,
- you can run node.js apps in a so called Cloud Service. Cloud Service differs from a raw VM in that your app is managed for you (Azure will detect when it died and restart a new instance; Azure will also patch the OS for you when necessary; all while ensuring that at least one instance of your app is always running). Cloud services come in two flavors: Web Role and Worker Role. In a Web Role your node.js app is hosted in IIS using
https://github.com/tjanczuk/iisnode, and effectively restricted to HTTP. In a Worker Role you have a similar flexibility as in raw VM in terms of listening on arbitrary TCP ports using whatever protocols you want - and this was my suggestion for addressing this particular scenario. Azure can load balance traffic across multiple instances of a Cloud Service.
- you can host your node.js app in Windows Azure Web Sites. This method runs your app in a shared hosting environment in IIS using
https://github.com/tjanczuk/iisnode, which again restricts the protocol to HTTP(S). Windows Azure Web Sites have several advantages over Web Roles, most notably git based deployment, and a free offering.
You can deploy node.js apps to Windows Azure VM or Windows Azure Web Sites from whatever platform node.js runs on using the node.js-based CLI we have: run `npm install azure -g` and then call `azure` to get started. Yes, that includes Macs. Also make sure to check out
https://www.windowsazure.com/en-us/develop/nodejs/.