A lot of things in SL are "datagrams", such as meshes, textures, animations/poses, and chat messages. These are small in size, and transfer failure are detrimental to UX.
For these kind of things, TCP (or HTTP-over-TCP), is not a suitable protocol. Namely, TCP enforces strict ordering + potential problem of "head of the line blocking".
I
strongly
suggest adopting SCTP-over-UDP for these kinds of transfers. Reason being SCTP is specifically designed to provide reliable concurrent asynchronous message-based communication with NO "head of the line blocking". If a stream (say, texture for a certain object) doesn't arrive and requires retransmission, that won't block delivery of other things.
To implement this, first add support for SCTP-over-UDP on server-side, then let the viewer indicate if they support SCTP-over-UDP during session sign-in. Upon which the server and the viewer can negotiate for a persistent SCTP session.
I believe implemented properly this will significantly increase the stability of connection between the viewer and the simulators, especially since "heartbeat" packets now no longer gets blocked by any preceding packets.
Note that I'm specifically referring to "SCTP-over-UDP", and not "Native SCTP over IP", because the latter might have problems traversing networks that have elements hard coded to support only TCP and UDP. So rather than wasting effort on negotiating "native SCTP then fallback to SCTP-over-UDP", just go directly to "SCTP-over-UDP", for which user space implementations are widely available if the OS doesn't provide one.