在谷歌应用引擎上的节点应用程序中的套接字io

ben*_*ron 3 sockets google-app-engine node.js

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

我的应用程序本地工作正常,但我在与我认为的套接字io相关的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>
Run Code Online (Sandbox Code Playgroud)

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

var socketio = io.connect('https://104.197.51.XXX')
Run Code Online (Sandbox Code Playgroud)

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

var socketio = io.connect('https://104.197.51.XXX:65080')
Run Code Online (Sandbox Code Playgroud)

这些都不起作用.

我有html加载正常和我有的jQuery部分和CSS也正常加载.这只是套接字的东西,我似乎出错了.我需要改变什么?

如果这是有用的,这里是app.yaml:

runtime: nodejs
vm: true
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.谢谢.

Jus*_*ith 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一起破解的任何东西都更可靠(你知道,直到我们修复它).你可以看到我在这里做的一些例子:

我希望这有帮助!