openshift / nodeJS 中的 Websocket 失败

Websocket failure in openshift / nodeJS

我知道这里已经问过一些类似的问题,但是 none 的建议解决方案似乎可行。 (下面我会post相关的回答)

我无法获得在 openshift 上运行的简单 websocket 应用程序。该应用程序本身在本地运行。 [编辑:我正在使用 socket.io]

相关代码:

服务器:

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

server.listen(process.env.OPENSHIFT_NODEJS_PORT, process.env.OPENSHIFT_NODEJS_IP);  

io.on('connection', function (socket) {
… 
});

index.html

<script src="/socket.io/socket.io.js"></script>

Client.js

this.socket = io.connect('http://app-domain.rhcloud.com:8000', {'forceNew':true });

结果:

我试过的东西

use port 80 instead of 8000 (on client)

结果: 与 'ws://app-domain.rhcloud.com/socket.io/?EIO=2&transport=websocket&sid=rsqAz33O_aYSFfN3AAAD' 的 WebSocket 连接失败:WebSocket 握手期间出错:意外的响应代码:400

Interchange server.list(… and var io = require('…

无结果

Use ip address of server instead of http://app-domain.rhcloud.com

无结果

类似问题

以下问题处理的是同一问题,但是 none 的建议解决方案目前有效

Socket.io and node on OpenShift

OpenShift NodeJS deployment : socket.io index.html port assignment, etc

unable to deploy nodejs socket io application on openshift

Socket.io.js returns 404 on OpenShift

我还克隆了一些 github 套接字示例。io/openshift 但它们都处理相同的问题。

要么我做错了什么,要么 openshift 发生了一些有趣的事情。

提前致谢。

终于破解了。显然,通过在服务器端对传输配置进行硬编码,它就可以工作了。

var io = require('socket.io', {
        transports: ['websocket']
    })(http);

希望这对以后的人有所帮助。

我在 openshift 上使用 socket.io 制作一个简单的聊天应用程序时遇到了同样的问题。我在 Stack Overflow 上查看了很多评论。最后换了两个地方

首先,添加:

 app.use(function(req,res,next)
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
        next();})

其次,在需要socket.io模块时添加一个选项。

  var io = require('socket.io', {
      transports: ['websocket']
  })(http);