I created my first node.js app using socket.io. Specifically I implemented the chat example published by socket.io. It works perfectly, locally. And then I tried deploying it to Google App Engine (making some code tweaks for node to work).
Everything shows up indicating that the node part is working well. However the chat doesn't work indicating that socket.io part isn't working. You can see the deployed app (and page source) here.
Do I have to do anything additional? Something in the yaml or json files?
yaml content:
runtime: nodejs
vm: true
skip_files:
- ^(.*/)?.*/node_modules/.*$
json content:
{
"name": "Chaty",
"description": "chatrooms app",
"version": "0.0.1",
"private": true,
"license": "Apache Version 2.0",
"author": "McChatface",
"engines": {
"node": "~4.2"
},
"scripts": {
"start": "node app.js",
"monitor": "nodemon app.js",
"deploy": "gcloud preview app deploy"
},
"dependencies": {
"express": "^4.13.4",
"socket.io": "^1.4.6"
}
}
Google has an example app using WebSockets here, you need to do the following to get it working correctly:
That should be it (don't take my word for it though, this is what I've been able to find out after doing some research on the docs), hope it helps!
Fetching your external IP from within Google App Engine
Opening the firewall port
In short this cannot be done on production and it appears to be work in process. The right architecture is to have a chat server on google compute engine as outlined here.
But as a proof of concept to use socket.io on google app engine is very similar to that shown in google appengine samples for websockets.
In case of socket.io do the following steps on server side. Code snippet below.
socket.io changes on server side
open firewall by command
I hope Google comes up with a production-ready solution soon enough on as this will become a key armour in any PaaS-arsenal.