我不确定在Web上使这个应用程序在Google Cloud上运行正常

Wen*_* O. 5 javascript google-app-engine node.js socket.io

我已经为Google Cloud部署了一个实时绘图应用程序,其中多个用户也可以看到其他用户绘制和加入.

我用我的代码遇到的问题是这部分:

var socket = io.connect("http://bla-bla-1234.appspot.com:8080");
Run Code Online (Sandbox Code Playgroud)

当地址保持这样时,我经常会在控制台上显示错误,例如WebSocket Error: Incorrect HTTP response. Status code 400, Bad Request在IE上Firefox can't establish a connection to the server at wss://bla-bla-1234.appspot.com/socket.io/?EIO=3&transport=websocket&sid=ULP5ZcoQpu0Y_aX6AAAB.进行测试或在Firefox 上进行测试时.

我已经改变了var socket = io.connect();这么多的参数只是为了看看我是否能看到一些实时绘图,在某些情况下我能够但不能平滑绘图,一个用户在屏幕上出现多行,当你所有的时候做的是画线一次.并且常常会出现以下错误:Websocket connection to '//bla-bla-1234.appspot.com/socket.io/?EIO=3&transport=websocket&sid=dJqZc2ZutPuqU31HAAX' failed: Error during WebSocket handshake: Unexpected response code: 400.

这是允许连接到服务器以及允许将数据显示给client.js文件上连接的所有客户端的内容,这不是所有代码,但我觉得这部分与此问题最相关:

var socket = io.connect("bla-bla-1234.appspot.com");

socket.on('draw_line', function (data) {
        var line = data.line;
        context.beginPath();
        context.strokeStyle = "#33ccff";
        context.lineJoin = "round";
        context.lineWidth = 5;
        context.moveTo(line[0].x, line[0].y);
        context.lineTo(line[1].x, line[1].y);
        context.stroke();
    });
Run Code Online (Sandbox Code Playgroud)

我试图在参数中添加一个端口(8080)但只是为了收到如下错误:

XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd.
Run Code Online (Sandbox Code Playgroud)

我想我的猜测是我的问题是,如何在参数中确定正确的地址并使其按预期(实时)顺利工作?

提前致谢.

Axe*_*ock 8

我联系了支持部门,因为我遇到了同样的问题.

答案很简单:Google App Engine的托管虚拟机目前不支持WebSockets.

在实现该功能之前,可能使其工作的唯一方法是强制Socket.io使用长轮询.

他们告诉我.但我没试过.在我的情况下,我会尝试切换到Google Compute Engine.

编辑:我从谷歌获得了其他信息.让我引用@ jmdobry的回答:

目前,只ws://支持协议(不是wss://),并且为了使用websockets,您需要获取运行您的应用程序的计算机的外部IP地址.不幸的是,socket.io在他们的工具中做了一些不起作用的东西,尽管我们有一个手动使用websockets并访问元数据以获取外部ip地址的例子:https://github.com/GoogleCloudPlatform/nodejs-docs -samples /树/主/ AppEngine上/的WebSockets

编辑2:我设法让我的应用程序在Google Compute Engine上运行.它有点复杂和耗时,说实话,我不理解100%的步骤.但是我按照教程的这一部分进行了一些微小的更改,比如所有文件中的项目名称,并且进展顺利:https://cloud.google.com/nodejs/getting-started/run-on-compute-发动机

  • 嗨cfl!我没有尝试长轮询.这是Google支持部门的建议.如果您想尝试,他们为我提供了这个链接:http://stackoverflow.com/questions/20698242/how-to-implement-long-polling-with-socket-io我设法用Google Compute Engine完成我的项目.设置起来比较复杂,但限制较少. (2认同)