Just to clarify, we don't _want_ to use Socket.IO on Node.js but
combined with the client-side library it has a lot of benefits
(multiple transports, automatic fallback, good cross-browser support,
namespaces and rooms match our problem domain). The server component
is sufficiently complex that we don't want to replicate all of that
functionality ourselves.
We don't need huge scalability (at least, not in foreseeable future)
so the in-memory aspect of Node.js's implementation isn't really a
concern if we have to fallback on it and expose our services via REST
to it. We'd rather have the whole server side on the JVM however.
We can't use direct WebSockets because browser support is not good
enough (and won't be for our target market for a long time I suspect).
That's why we are looking at netty-socketio since it seems to support
the Socket.IO client "out of the box" and is reasonably easy to use
from Clojure.
The reasons stated above are also why we can't just use http-kit
(which was my first thought) - we need more machinery than just
WebSockets.
I had found this by Chris Granger -
https://github.com/ibdknox/clj-socketio - but it's outdated and when I
reached out to him, he confirmed the first point above - that the
server side of Socket.IO is too complex to warrant trying to replicate
ourselves (and that Socket.IO had evolved sufficiently that his
project wouldn't be a useful starting point either).
Sean