2015-04-30 3 views
2

Я не могу получить socket.io, работающий на OpenShift. Спустя несколько часов я поработал в Google, но мне ничего не помогло. Локально он отлично работает (с разными портами и локальным хостом, как конечно).Не удается получить socket.io и nodejs с OpenShift

Это мой server.js файл:

var port  = process.env.OPENSHIFT_NODEJS_PORT || 8080; 
var ipadr = process.env.OPENSHIFT_NODEJS_IP || "127.0.0.1"; 
var http = require('http').createServer(function(request, response) { 
    response.writeHead(200, {"Content-Type": "text/plain"}); 
    response.end(); 
}).listen(port,ipadr); 
console.log(port+":"+ipadr); 

var io = require('socket.io').listen(http), 
fs = require('fs'), 
request = require('request'), 
mysql = require('mysql'), 
moment = require('moment'), 
connectionsArray = [], 
connection = mysql.createConnection({ 
host: 'xxx', 
user: 'xxx', 
password: 'xxx', 
database: 'xxx', 
port: 3306 
}), 
POLLING_INTERVAL = 1000, 
pollingTimer; 

io.on('connection', function(socket){ 
    console.log('a user connected'); 
}); 

var updateSockets = function(data) { 
    // adding the time of the last update 
    t = new Date(); 
    t = moment().format('H:mm:ss'); 
    console.log('(%s) Connections: %s', t, connectionsArray.length); 
    // sending new data to all the sockets connected 
    connectionsArray.forEach(function(tmpSocket) { 
    tmpSocket.volatile.emit('notification', data); 
    }); 
}; 
console.log('server.js executed\n'); 

Когда я бегу это на SSH OpenShift он просто показывает первый console.log с моим портом и ipadress из OpenShift и последней строки моего server.js код:

server.js выполнена

и это все. Поэтому я не получаю сообщение «пользователя, подключенного», например, когда я тестирую его локально.

Это, как я хочу подключить в моей стороне клиента .js-файла:

var socket = io.connect('http://njs-uniqo.rhcloud.com:8080/'); 

браузера (Chrome) Консольные выходы:

> ?s=product&id=10:1 XMLHttpRequest cannot load http://xxx.rhcloud.com:8000/socket.io/?EIO=3&transport=polling&t=1430395459829-1. 
> No 'Access-Control-Allow-Origin' header is present on the requested 
> resource. Origin 'http://localhost' is therefore not allowed access. 
> The response had HTTP status code 503. 

Если изменить порт на 8080 на на стороне клиента .js-файл я получаю ERR_CONNECTION_TIMED_OUT:

GET http://xxx.rhcloud.com:8080/socket.io/?EIO=3&transport=polling&t=1430395346761-6 net::ERR_CONNECTION_TIMED_OUT 

ответ

2

Вам нужно использовать порт 8000. Это то, что открывает силы сдвига для веб-узлов.

var socket = io.connect('http://yourapp.rhcloud.com:8000/',{'forceNew':true }); 

порт 8000 для HTTP и 8443 для протокола HTTPS

Source

+0

Затем я получаю сообщение консоли с заголовком «Нет» Access-Control-Allow-Origin »на запрошенном», как упоминалось и цитируется в моем вопросе. –

+0

Я надеюсь, что вы включили cors. Если нет, сделайте это. - http://enable-cors.org/server_expressjs.html https://www.npmjs.com/package/cors – Tejas

+0

Да, я включил cors. Я попытался подключиться к экспресс-модулю и без него (как в моем коде), но получил тот же результат. –

1

Вы должны редактировать package.json. Добавить ...

"socket.io": "~0.9.16" 

... под зависимостями. Затем сервер автоматически загружает socket.io, который по умолчанию отсутствует.

Смежные вопросы