Я использую функциональные возможности управляемой виртуальной машины для запуска сервера 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');
Спасибо за ваше предложение. Я отправил [билет] (https://code.google.com/p/googleappengine/issues/detail?id=11570) – kvdb