【发布时间】:2014-12-24 14:27:44
【问题描述】:
我正在使用托管 VM 功能运行一个 WebSocket 服务器,我想通过如下 URL 在任何端口(最好是端口 80)上向 Internet 公开该服务器:mvm.mydomain.com
我还没有取得太大的成功。 以下是我用来完成此任务的各种文件的相关部分:
Dockerfile:
EXPOSE 8080 8081
在 Dockerfile 的末尾,一个 Python 应用程序启动:它响应端口 8080 上的健康检查(我可以验证这是否有效)并响应端口 8081 上的 WebSocket 请求。
app.yaml:
module: mvm
version: 1
runtime: custom
vm: true
api_version: 1
network:
forwarded_ports: ["8081"]
我使用以下方法将此应用程序部署到云端:
$ gcloud preview app deploy .
在云控制台中,我确保 TCP 端口 8080 和 8081 被接受用于传入流量。我还观察到分配给 GCE 实例 (mvm:1) 的 IP 地址是:x.y.z.z.
$ curl http://x.y.z.z:8080/_ah/health
$ curl http://mvm.my-app-id.appspot.com/_ah/health
回复200 OK。
使用一些 JavaScript 连接 WebSocket 服务器也可以:
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
我还在 mvm.mydomain.com 上设置了 GAE 自定义域 CNAME。
然后使用 JavaScript 连接 WebSocket 服务器应该如下所示:
new WebSocket('ws://mvm.mydomain.com:8081');
【问题讨论】:
标签: google-app-engine websocket docker gcloud