Right now we register keep-alive and timeout timers for each connection. And that is very expensive. Also both timers are in seconds. So instead we should use one global timer, seconds base. And manage keep-alive and timeout ourselfs.
It might be useful to use same approach for client as well.