1. Токио - безальтернативно практически.
2. Нет, сессию с клиентом как раз лучше абстрагировать от сокетов. Клиентское ПО должно иметь возможность погасить tcp-сессию, а потом переоткрыть ее. И это все должно происходить без потери собственно сессии.
3. Совсем необязательно. Протокол можно и на udp реализовать. http/3 например вполне себе udp-based.
4. Сериализация-десериализация тут в любом случае имеет место. Думаю в данном случае json/xml нормальный вариант. Как альтернатива - посмотреть можно и на protobuf, тут все точно будет быстрее сериализорваться-распаковываться чем в json.