on some browsers the client was only successfully joining their own private room after the ajax response was succeeding. updated the code to only make the ajax request as a callback once the room join is successful, but, this seems fragile and Incorrect - seems weird to combine ajax request with a socket. the request should be via the socket or the whole thing should be ajax-ified.
get expiry working again with more fine-grained time accuracy.