Как создать кроссплатформенный дуплексный веб-сервис связи
Я хотел бы создать веб-сервис в.Net, который могут использовать клиенты разных типов (Web, exe, java), независимо от языка, на котором они написаны.
Кроме того, он должен поддерживать обратные вызовы и иметь возможность легко проходить через брандмауэры и NAT (зная, что внутренний IP-адрес клиента может измениться или быть удален из NAT).
В-третьих, поскольку это корпоративный продукт, я хочу избегать зависимости от третьих сторон, особенно тех, которые требуют определенной среды или того, чего клиент не хочет.
Какие технологии или подходы я могу использовать?
Я смотрю на веб-сокеты, но там я также вижу много сложностей, и я не уверен, что не так много случаев топологии и пограничной совместимости, которые могут сделать меня ненадежным.
Спасибо
1 ответ
Для простых служб запроса-ответа вы можете использовать REST (через HTTP). Любая клиентская технология может получить доступ к HTTP на этом этапе (даже CLI), а REST является хорошо известным и хорошо понятным распределенным механизмом. Проблема связана с обратными вызовами. Существуют платформы, которые обрабатывают обратные вызовы HTTP (простой поиск в Google даст вам хорошие ответы), но, с другой стороны, решения, которые я видел, неуклюжи.
В отличие от обычного HTTP, WebSocket является постоянным соединением. Как и любая другая спецификация IETF и W3C (или любой другой стандарт в этом отношении), существуют различные реализации с различной степенью надежности, производительности и т. Д. Существует, вероятно, около 100 реализаций клиентов и серверов WebSocket. Некоторые реализации решают реальные проблемы, такие как переподключения, сетевые посредники, высокая масштабируемость, мобильные возможности и т. Д., А некоторые реализации просто нет. Я бы посоветовал вам выбрать реализацию, которая предоставляет эти функции корпоративного уровня.
Кстати, WebSocket чертовски прост