【问题标题】:Websocket failure in openshift / nodeJSopenshift / nodeJS中的Websocket失败
【发布时间】:2015-11-05 14:58:32
【问题描述】:

我知道这里有人问过一些类似的问题,但是建议的解决方案似乎都不起作用。 (我会在下面发布相关答案)

我无法让一个简单的 websocket 应用程序在 openshift 上运行。该应用程序本身在本地运行。 [编辑:我正在使用 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 });

结果:

  • GET http://****-****.rhcloud.com:8000/socket.io/?EIO=2&transport=polling&t=1446734825100-0 net::ERR_CONNECTION_TIMED_OUT *

我尝试过的东西

使用端口 80 而不是 8000(在客户端)

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

交换 server.list(...var io = require('...

没有结果

使用服务器的ip地址代替http://app-domain.rhcloud.com

没有结果

类似问题

以下问题涉及相同的问题,但是到目前为止,建议的解决方案都没有奏效

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

Can't get socket.io and nodejs running with OpenShift

Socket.io.js returns 404 on OpenShift

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

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

提前致谢。

【问题讨论】:

  • 你试过在客户端强制 websocket 传输吗? this.socket = io('...', {forceNew: true, transports: ['websocket']});
  • 您是否尝试在尝试连接时通过运行 rhc tail &lt;yourappname&gt; 检查 OpenShift 日志?它可能会提供更多的线索,问题出在哪里。
  • @Jiri :是的,当然……但是没有语法错误,所以没有那么多日志记录。所以没有帮助!
  • @Xodrow 我试过了……没有显着变化
  • @Subtiv 运气好吗?我也一直在尝试这个。

标签: javascript node.js websocket socket.io openshift


【解决方案1】:

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

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

希望这对将来的某人有所帮助。

【讨论】:

    【解决方案2】:

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

    首先,添加:

     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);
    

    【讨论】:

    • 我不知道为什么以及哪个更改有效。感谢您的任何建议和指导。
    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 2013-11-25
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2015-10-16
    相关资源
    最近更新 更多