使用nodejs运行时将受管VM上的Google Appengine前端连接到安全的websocket

时间:2014-10-15 17:00:20

标签: google-app-engine socket.io google-api-nodejs-client

通过带有托管VM支持的Google appengine前端连接到wss安全套接字服务器时遇到了麻烦。

购买默认谷歌曝光仅端口8080在docker image google / nodejs-runtime中,即使在Dockerfile中公开端口8443,如下所示,我只能连接到http://localhost:8080 not https://localhost:8443

FROM google / nodejs

WORKDIR / app

ADD package.json / app /

运行npm install

ADD。 /应用

EXPOSE 8443

CMD []

ENTRYPOINT [" / nodejs / bin / npm"," start"]

仍然可以看到端口8080包含在容器中  " / nodejs / bin / npm start 8443 / tcp,0.0.0.0:8080-> 8080 / tcp

如果我登录我的托管虚拟机实例并使用

运行容器映像

docker run -d -p 8443:8443 nodejs.default.wss-check:latest

并尝试

$curl https://localhost:8443

我得到卷曲:(60)SSL证书问题:无法获得本地颁发者证书,看起来像是连接但我使用真实域名

我已经在github中创建了一个问题以及https://github.com/GoogleCloudPlatform/appengine-nodejs-quickstart/issues/13,但没有那么有帮助。

相同的设置就像普通计算实例中的魅力一样。但它并没有自动扩展。 对此问题的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您无法在localhost(https)上卷曲到curl: (60) SSL certificate problem: unable to get local issuer certificate的原因是因为任何CA都不知道“localhost”。您需要运行curl -k https://localhost:8443才能忽略localhost缺少证书。

答案 1 :(得分:1)

目前看来Google Managed VM仅支持JAVA

上的Websocket连接

即使您在GMV上使用nodejs尝试websocket连接,它也默认为轮询传输。如果你想在现场看到这个,你可以使用set socket transports,deploy to live并查看console-network,看看它使用的是哪个传输!

socket.set('transports', [
'websocket'
, 'flashsocket'
, 'htmlfile'
, 'xhr-polling'
, 'jsonp-polling'
]);

我们必须等到Managed VM中的google implements websocket支持。如果有人在GMV上工作,请在这里评论:)