Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js google应用程序引擎上节点应用程序中的套接字io_Node.js_Sockets_Google App Engine - Fatal编程技术网

Node.js google应用程序引擎上节点应用程序中的套接字io

Node.js google应用程序引擎上节点应用程序中的套接字io,node.js,sockets,google-app-engine,Node.js,Sockets,Google App Engine,我想在GAE上运行一个用NodeJS编写的带有socket io的p2p聊天 我的应用程序在本地运行正常,但在我认为与套接字io相关的GAE服务器上运行时会收到错误消息 以下是本地运行时my localclient.html的两个相关脚本标记: <script src="/socket.io/socket.io.js"></script> <!-- <script src="https://cdn.socket.io/socket.io-1.2.0.js"&g

我想在GAE上运行一个用NodeJS编写的带有socket io的p2p聊天

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

以下是本地运行时my local
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>
或者将其指向我的防火墙规则中指定的端口65080(请参阅google提供的文档:

这些都不管用

我已经很好地加载了html,我已经加载了jQuery部分,css也很好地加载了。只是套接字的东西我似乎出了问题。我需要改变什么

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

runtime: nodejs
vm: true

非常感谢您的帮助。谢谢。

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

var socketio = io();
而不是

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

这对我来说效果很好。

遗憾的是,App Engine不支持websockets(目前)。您使用的黑客软件确实不可靠,原因如下:

  • 它直接连接到实例,实例可以随时关闭或回收
  • 如果没有神奇的黑客技术,就真的没有办法让https沿着这条路线走下去
简言之,这还没有准备好生产。尽管如此

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

相反,我建议使用pubnub:

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


我希望这有帮助!

谢谢。这真的很有帮助。我需要我的应用程序atm只用于非常小规模的数据收集,所以也许第一个链接中概述的解决方法就可以了。我也发现了这一点。为什么我犹豫切换到pubnub是因为我的应用程序现在已经构建了所有我想要的控件,我不知道重建是否值得。等等什么?你展示了一个应用引擎与websockets一起工作的例子,但你说它仍然不工作?请你详细说明一下!正如我解释的那样-它会有点工作。它真的不可靠,不支持https,当你的虚拟机宕机时会随机停止工作一段时间。你有计划在不久的将来添加websockets支持吗?
var socketio = io();
var socketio = io.connect("127.0.0.1:1337");