Имеется постоянно пополняемая БД. Сервер должен выбирать данные из БД и отдавать клиентам, как синхронно (сразу после запроса клиента), так и асинхронно. Другими словами, между клиентами и сервером устанавливается двустороннее соединение. Целевая платформа для сервера — Debian, для клиентов — Windows, Android (+ веб-интерфейс, но тут уже без асинхронности). Все взаимодействия через интернет (у сервера белый IP; клиент может быть где хочешь — за NAT, за Proxy).
Вопрос: как лучше всего реализовать такой TCP-сервер (язык, библиотеки, примеры), чтобы не городить много велосипедов?
Несформированные идеи как попытка симбиоза быстрого гугления и имеющихся навыков:
— написать свой TCP-сервер (Erlang?), начиная с синхронных/асинхронных сокетов, многопоточности и проч.
— или написать модуль для Apache? (плохо предтавляю как это выглядит, да и вряд ли подойдет)
— свой протокол взаимодействия между клиентом и сервером на основе JSON?
— использовать STUNT для обхода NAT-ов?
— использовать SOCKS для прохода TCP-потока через Proxy?
То есть при такой конфигурации полнодуплексное соединение вполне себе будет работать, и только если бы сервер находился за NAT пришлось бы подключать NAT traversal? То есть NAT traversal (STUN и проч.) актуальна лишь для p2p-сетей?