javascript - 使用 Socket.io 的 Node.js 应用程序在 OpenShift 托管上给出 "Unexpected response code: 400"

标签 javascript node.js websocket socket.io openshift

我有一个在本地运行良好的 Node.js 应用程序,但是当我将其推送到 OpenShift 时,它在开发控制台中给出了以下错误:

WebSocket connection to 'ws://myapp-mydomain.rhcloud.com/socket.io/?EIO=3&transport=websocket&sid=mpKjro8KjQ5dIg0GAAAE' failed: Error during WebSocket handshake: Unexpected response code: 400

这是一个小型多人“游戏”,你和任何其他连接的玩家都是立方体,可以四处移动并且可以看到彼此的移动等。我使用 Node 和 socket.io 来获取玩家位置并将新坐标发送给其他玩家玩家,但是当我在 OpenShift 上托管它时,它给了我上面的错误。 奇怪的是,它几乎可以工作,即你可以看到其他玩家四处移动,但它非常滞后且缓慢。 同一个应用程序在 Scalingo 托管上运行良好,因此它一定是 OpenShift 的东西。

这是我用于启动 socket.io 的客户端代码:

<script src="/socket.io/socket.io.js"></script>
<script>
    var socket = io();
</script>

和服务器:

var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function(req, res){
  res.sendFile('index.html');
});

this.ipaddress = process.env.OPENSHIFT_NODEJS_IP;
this.port      = process.env.OPENSHIFT_NODEJS_PORT || 8000;

http.listen( port, ipaddress, function(){
  console.log('listening on:'  + port);
});

最佳答案

谢谢 apsillers,改变这条线就成功了:

var socket = io();//OLD
var socket = new io("ws://myapp-mydomain.rhcloud.com:8000/"); //NEW

仍然有 90 毫秒的延迟,但这是另一个问题。另外有点烦人的是,如果我想在本地运行和测试应用程序(我就是这么做的),我必须将其改回来。

关于javascript - 使用 Socket.io 的 Node.js 应用程序在 OpenShift 托管上给出 "Unexpected response code: 400",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35779645/

相关文章:

javascript - Moment js返回负时间戳

javascript - 在 Angular 中,如何等待完成异步调用然后转到 foreach 内的下一个对象?

node.js - 在node.js中使用http时出现错误

node.js - nodejs 基于域的路由

rest - 如何描述 WebSocket 接口(interface)?

javascript - 如何解决流在 binary.js(BinaryStream.write)的 Node 服务器上不可写?

javascript - 一个简单的 JavaScript 函数由于奇怪的错误而拒绝工作

node.js - 配置 Sails.js 以使用 Vash View 引擎

python - 在同一事件循环中运行 Qt 和 Websockets 服务器

javascript - 将变量插入正则表达式