我正在使用託管虛擬機功能來運行WebSocket服務器,我想通過URL(如:mvm.mydomain)在任何端口(最好是端口80)上公開Internet。 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。我也觀察到分配給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');
感謝您的建議。我提交了[ticket](https://code.google.com/p/googleappengine/issues/detail?id=11570) – kvdb