The big hill to climb here is that ZServer is currently not really well geared for long standing connections. You'd somehow have to have a separate thread pool for managing those or otherwise the per thread caching would get you. This can be partially mitigated via configuring a non-caching (or low caching) separate ZEO client with a large thead pool just for serving the socket clients.
I think we'll be (at least indirectly) tackling hauling the under the hood stuff enabling that to work over to Zope4 in Sauna Sprint this year. More people are more than welcome to join us.
Or one can have a separate non-Plone/Zope process / service to which you push events via a message queue from Plone and have your webfront js client register for those subscription channels. AFAIR @datakurre did something like the latter route that a couple of years back.