2014-12-24 2 views
4

Я использую функциональные возможности управляемой виртуальной машины для запуска сервера WebSocket, который я хотел бы открыть в Интернете на любом порту (предпочтительно, порт 80) через URL-адрес, например: mvm.mydomain. comПредоставление нескольких портов из ManagedVM

У меня пока нет большого успеха. Вот соответствующие части различных файлов я использую, чтобы выполнить это:

Dockerfile:

EXPOSE 8080 8081 

В конце Dockerfile, приложение Python запускается: он реагирует на проверки здоровья на порту 8080 (я могу проверить, что это работает) и отвечает на WebSocket запросов на порт 8081

app.yaml:

module: mvm 
version: 1 
runtime: custom 
vm: true 
api_version: 1 

network: 
    forwarded_ports: ["8081"] 

развернуть это приложение к облако с использованием:

$ gcloud preview app deploy . 

В облачной консоли я уверен, что для входящего трафика принимаются TCP-порты 8080 и 8081. Я также наблюдаю IP-адрес, назначенный экземпляру GCE (mvm: 1): x.y.z.z.

$ curl http://x.y.z.z:8080/_ah/health 
$ curl http://mvm.my-app-id.appspot.com/_ah/health 

Repond оба с 200 OK.

Подключение к серверу WebSocket, используя некоторые JavaScript работы, а также:

new WebSocket('ws://x.y.z.z:8081'); 

До сих пор так хорошо. Кроме этого, не работает (тайм-аут):

new WebSocket('ws://mvm.my-app-id.appspot.com:8081'); 

Я хотел бы знать, почему выше команда WebSocket не работает. Возможно, что-то, что я не понимаю в взаимодействии с пересылкой портов GAE/GCE?

Если это может быть сделано для работы как-то, я предполагаю, что следующие шаги будут последними для его завершения.

dispatch.yaml:

dispatch: 
    # Send all websocket traffic to the ManagedVM module. 
    - url: "mvm.mydomain.com/*" 
    module: mvm 

Я также настроить GAE пользовательский домен CNAME в mvm.mydomain.com.

Подключение к серверу WebSocket с помощью JavaScript, то должен работать как:

new WebSocket('ws://mvm.mydomain.com:8081'); 

ответ

0

Это может быть очень хорошо, что перенаправление портов из appspot.com не выполняется, учитывая, что до (относительно недавно) выпуска управляемых виртуальных машин , единственный трафик, который пошел на appspot.com, был на порту 80 или 443. Я бы предложил использовать метод IP-of-instance, который, как вы нашли, работает.

Если вы не нашли, что полностью удовлетворяете, вы должны пойти в public issue tracker for app engine и отправить запрос функции, чтобы маршрутизатор appspot.com обнаружил, загорается ли запрос для модуля, который соответствует управляемой виртуальной машине и пытается перенаправить порт в таком случае.

Дело в том, что размещение необработанного порта в конце домена, как это означает, что ваш браузер будет использовать порт, указанный вами как параметр подключения, к appspot.com, а не как параметр запроса, поэтому appspot.com будет должны прослушивать все порты и перенаправлять, если они действительны. Это может быть небезопасным/неэффективным, поэтому, возможно, номер порта может быть параметром запроса или частью строки домена, аналогичным тому, как можно указать версию и модуль ...

Во всяком случае, учитывая то, как порты я очень сомневаюсь, что если ваш очень простой пример вызвал сбой, то домен приложения appspot.com был даже настроен для обработки пересылки портов в управляемые виртуальные контейнеры вообще.

+1

Спасибо за ваше предложение. Я отправил [билет] (https://code.google.com/p/googleappengine/issues/detail?id=11570) – kvdb

 Смежные вопросы

  • Нет связанных вопросов^_^