我有一个在本地运行良好的 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/