【问题标题】:Socket.io 2.0.3 on Openshift 2 ERR_CONNECTION_TIMED_OUTOpenshift 2 ERR_CONNECTION_TIMED_OUT 上的 Socket.io 2.0.3
【发布时间】:2017-08-14 13:14:41
【问题描述】:

我想在 Openshift 2 上使用 socket.io 2.0.3 和 node.js(最新版本),我不能,当我在本地运行时,套接字工作完美,但在 openshift 中我得到这个错误:

GET http://tfg-eliasmarnev.rhcloud.com:3000/socket.io/?EIO=3&transport=polling&t=LtWrbEF net::ERR_CONNECTION_TIMED_OUT

这就是代码:

服务器

app.js

var fs = require('fs');
var express = require('express');
var app = express();
var server = require('http').Server(app);
var bodyParser = require ('body-parser');
var jwt = require('jsonwebtoken'); 


//App configuration
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1';
var server_port = process.env.OPENSHIFT_NODEJS_PORT || 3000;

//Websockets con socket.io
var io = require('socket.io')(server);

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));

//Tanto el puerto como la ip son necesarios para OpenShift, 
//de lo contrario intenta enlazar el servidor con la IP 0.0.0.0 y falla
server.listen(server_port, server_ip_address, function () {
      console.log( "APP Listening on: " + server_ip_address + ":" + server_port )
    }); 

// Permitir que algunos archivos sean enviados a través de HTTP
app.use(express.static(__dirname + '/')); 

// Serve GET on http://domain/
app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html');
});

//Iniciamos la conexión.
io.on('connection', function (socket) { // Conexiones entrantes de clientes

    console.log('Usuario conectado');

    //Permanecemos a la escucha del evento coordenada
    socket.on('coordenada', function (data) { // listen to the event

        io.emit('notificacion', { // emit an event to all connected sockets
            Nombre: data.name
        });
    }); 
});

客户

index.html

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.0.3/socket.io.js"></script> 

factory.js

app.factory('socket', ['$rootScope', function($rootScope) {

   //var socket = io.connect('http://tfg-eliasmarnev.rhcloud.com:3000/', {'forceNew':true });   
   //var socket = io.connect(); 
     var socket = io.connect('http://tfg-eliasmarnev.rhcloud.com:3000');

  return {
    on: function(eventName, callback){
      socket.on(eventName, callback);
    },
    emit: function(eventName, data) {
      socket.emit(eventName, data);
    }
  };
}]);

我不知道问题所在,有什么想法吗?

【问题讨论】:

    标签: javascript node.js socket.io openshift


    【解决方案1】:

    您应该通过v2 documentation 的端口 8000 访问 WebSockets

    【讨论】:

    • 我尝试了那个whitout的结果,而且我的应用在3000端口上运行,它必须使用8000端口?
    • 您的应用程序必须使用环境变量来监听端口,OPENSHIFT_&lt;cart-name&gt;_PORT
    • 是的,我使用 var server_port = process.env.OPENSHIFT_NODEJS_PORT || 3000;还不够吗?对不起我对这个主题的无知..
    • 不用担心 =) 因此,当您的应用程序在正确的端口 (OPENSHIFT_NODEJS_PORT) 上运行时,然后在端口 8000 上公开访问应用程序。您的应用程序正在侦听的端口,与公开可用的端口不同。
    • 明确地说,websocket 是通过端口 8000/8443(ws://host:8000 或 wss://host:8443)访问的。您的 Web 应用程序可通过端口 80/443(hosthost)使用。
    猜你喜欢
    • 2015-04-08
    • 2017-09-01
    • 2017-01-22
    • 2018-02-04
    • 2017-11-30
    • 1970-01-01
    • 2015-10-08
    • 2014-09-10
    • 1970-01-01
    相关资源
    最近更新 更多