Комбинация TCP-связи и Rest API для мобильного приложения - PullRequest
0 голосов
/ 09 марта 2019

У меня есть мобильное приложение, опубликованное в google play, и в настоящее время оно работает довольно хорошо, и на нем одновременно работают 6-8 тысяч пользователей. На самом деле мне нужна помощь, чтобы изменить архитектуру и обмен данными между сервером и клиентом Android. Вот сценарий.

1- 1-linux сервер в частной сети. Недоступно из интернета.

2- 1-сервер Windows в общедоступной сети.

3- 1-мобильное приложение.

Связь идет так.

Каждый запрос с мобильного телефона на сервер приложений Windows через API Rest, разработанный в asp.net с использованием C #. Затем оставшийся API связывается с сервером Linux через протокол TCP. Получает данные с сервера Linux и отправляет их обратно в приложение через API остальных. Это хорошо работает для небольшого количества пользователей около 8 КБ. Основная проблема - связь между сервером приложений Windows и сервером Linux из-за ограничения TCP.

Связь между оставшимся API является сервером linux

Rest API создает TCP-сокет, используя IP-адрес сервера и PORT для каждого нового запроса, а затем

      1-Logins to system using username and password
      2-Sends the command to get specific data. 
      3-Receives the desired data. 
      4-Logouts from linux server. 
      5-Disposes off the socket and sends this result to mobile application. 

Из-за большого количества запросов от мобильного пользователя вышеуказанные шаги повторяются снова и снова, что в конечном итоге приводит к засорению порта на сервере. После обсуждения с владельцем сервера я должен создать длительный сеанс TCP с сервером linux, который будет оставаться подключенным все время, и все запросы будут отправляться по этому каналу без отключения / удаления сокета каждый раз и повторного создания. Я хочу способ создать длинный сеанс TCP с сервером Linux. Но это невозможно с Rest API. Моя точка зрения в том, как я могу добиться этого в текущем сценарии У меня есть платформное ограничение C # и dotnet. Я не очень разбираюсь в dotnet, так как я разработчик Android. Любая помощь будет в значительной степени присвоена.

1 Ответ

0 голосов
/ 09 марта 2019

Как насчет использования WebSocket для вашего постоянного соединения?В JavaScript код выглядит примерно так:

var theSocket = null;
function interactServer() {
    theSocket = new WebSocket(document.URL.replace("http", "ws"));
    theSocket.onopen = function() {theSocket.onopen = null; notifyServer(<initialization request>);};
    theSocket.onmessage = function(event) {<function to handle a message>(event.data);};
    theSocket.onclose = function() {<cleanup code>};
    }

, где notifyServer - это функция, отправляющая REST-запрос на сервер.Сделайте interactiveServer функцией onload для вашего начального HTML-экрана, чтобы первым делом был создан экземпляр соединения.

Проблема с использованием XHR заключается в том, что серверная платформа может пропускать ресурсы сокета, даже когда браузер закрывает сокет.Платформа на базе Windows, безусловно, будет.Соединение WebSocket является постоянным во всех запросах и поэтому не создает проблему утечки ресурсов.

...