谷歌应用引擎

时间:2016-08-13 22:06:08

标签: node.js sockets google-app-engine

我想在GAE上用socket io运行在节点js中编写的p2p聊天。

我的应用程序在本地工作正常,但是当我在与我认为的套接字相关的GAE服务器上运行时,我收到错误消息。

以下是我本地client.html在本地运行时的两个相关脚本标记:

<script src="/socket.io/socket.io.js"></script>
<!-- <script src="https://cdn.socket.io/socket.io-1.2.0.js"></script> -->
<script type="text/javascript">
    // our socket.io code goes here
    var socketio = io.connect("127.0.0.1:1337");
    socketio.on("message_to_client", function (data) {
        to_history(data['message']);
    });

    function send_message() {
        var msg = [document.getElementById("text1").value, user1, uuid];

        socketio.emit("message_to_server", {
            message: msg
        });
    }

</script>

我见过博客/帖子说要进行部署我需要允许防火墙规则here on SO(现在已经存在)。我还尝试将部署的应用程序指向静态外部IP(在我的谷歌云控制台中将其静态化后):

var socketio = io.connect('https://104.197.51.XXX')

或将其指向防火墙规则中指定的端口65080(请参阅Google here提供的文档:

var socketio = io.connect('https://104.197.51.XXX:65080')

这些都不起作用。

我已经加载了很好的html和我拥有的jQuery部分,而且css也加载得很好。这只是套接字的东西,我似乎出错了。我需要改变什么?

如果有用,请点击app.yaml:

runtime: nodejs
vm: true

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:5)

可悲的是,App Engine还不支持websockets(尚未)。由于以下几个原因,您正在使用的黑客攻击真的不可靠:

  • 它直接连接到实例,可以随时关闭或回收
  • 没有神奇的hackery,实际上没有办法让https沿着这条路走下去。

简而言之 - 这不是生产准备。那已经说过......

https://github.com/GoogleCloudPlatform/nodejs-docs-samples/tree/master/appengine/websockets

该链接将向您显示一个工作示例以及如何设置它的说明。

而不是 - 我建议使用pubnub: https://www.pubnub.com/docs/nodejs-javascript/pubnub-javascript-sdk

它有一个非常好的API,并且比你可以与App Engine一起破解的任何东西都更可靠(你知道,直到我们修复它)。你可以看到我在这里做过的一些例子:

我希望这有帮助!

答案 1 :(得分:1)

我最近也做了类似的聊天webapp并将其部署在heroku(https://chatterboxxx.herokuapp.com)上。我也使用了socket.io。我不确定GAE,但我认为你不需要在socket.io js代码中指定任何IP地址。 我认为你应该使用

var socketio = io();

而不是

var socketio = io.connect("127.0.0.1:1337");

这适合我。