[обновление 1] я узнал, что на самом деле io.connect('http://xxxxx.herokuapp.com')
отправить запрос на xxxxx.herokuapp.com порт 3000: соединение работает, если запрос без номера порта , Я не указал порт в моем io.connect, как я могу избавиться от этого?Подключение к серверу Socket.io с сервера Rails
Request URL:http://xxxxx.herokuapp.com:3000/socket.io/1/?t=1360853265439
Request Headersview source
Cache-Control:max-age=0
Origin:http://localhost:3000
Referer:http://localhost:3000/about
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
Query String Parametersview sourceview URL encoded
t:1360853265439
[обновление 2] для сравнения здесь является руководителем успешного подключения, когда я запустить Java скрипт из локальной файловой системы
Request URL:http://xxxxx.herokuapp.com/socket.io/1/?t=1360854705943
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:max-age=0
Connection:keep-alive
Host :xxxxx.herokuapp.com
Origin:null
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17
[обновление 3] набор портов до 80, как представляется, работает
var socket = io.connect('http://xxxxx.herokuapp.com',{port:80});
[Вопрос] Я намерен установить socket.io на один хост, чтобы поговорить с Rails-приложением на другом хосте. Все работает отлично, когда клиентский Javascript был размещен на localhost: 3000 для подключения к Socket.io, размещенного на сервере node.js на localhost: 5000. Он работает так же, как на стороне клиента Javascript и Socket.io, размещенных на Heroku на том же порту.
socket_server.js размещен на XXXX.herokuapp.com
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
, i = 0
io.configure(function() {
io.set("origin = *");
io.set("transports", ["xhr-polling"]);
io.set("polling duration", 100);
});
var port = process.env.PORT || 5000; // Use the port that Heroku provides or default to 5000
app.listen(port, function() {
console.log(">>>>>>socket server up and running on port: "+port);
});
function handler (req, res) {
fs.readFile(__dirname + '/socket.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading socket.html');
}
res.writeHead(200);
res.end(data);
});
}
io.sockets.on('connection', function (socket) {
console.log(">>>>>>client connected through socket");
socket.emit('news', '>>>>>>server say hello to client', i);
console.log('>>>>>>server say hello to client' +'['+i+']')
socket.on('my other event', function (data) {
socket.emit('news', i);
i++;
console.log(data +'['+i+']');
});
});
, если я ставлю на стороне клиента Javascript в socket.html на XXXX.herokuapp.com же, как socket.io он себя так, как ожидалось.
<div id='sandbox'>sandbox</div>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('window.location.hostname');
$('#sandbox').append('<div> lora </div>');
socket.on('news', function (data, index) {
$('#sandbox').append('<div>' + data + ' ' + index + '</div>');
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Однако, если я ставлю на стороне клиента JavaScript, на сервере Rails на YYYY.herokuapp.com и попытаться подключиться к серверу Socket.io на xxx.herokuapp.com, он не работает. ему удалось retreive socket.io.js на сервере, но io.connect ('http://xxxxx.herokuapp.com') не получает никакого ответа от сервера.
<div id='sandbox'>sandbox</div>
<script src="http://xxxxx.herokuapp.com/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://xxxxx.herokuapp.com');
$('#sandbox').append('<div> lora </div>');
socket.on('news', function (data, index) {
$('#sandbox').append('<div>' + data + ' ' + index + '</div>');
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Я прочитал несколько сообщения точки решения установить io.set («происхождение = *»), но это, похоже, не работает в этом случае.
Я пытаюсь разместить socket.io на Nodejisui и указывать свой javascript на приложении rails на xxx.jit.su var socket = io.connect ('http://xxxxx.jit.su'); но по-прежнему имеет ту же проблему – WYH
кажется, что это как-то связано с доменом, чем с хостингом. то есть[рабочий] клиент js на localhost: 3000 <==> socket.io на localhost: 5000. [рабочий] клиент js на xxx.herokuapp.com <==> socket.io на xxx.herokuapp.com [разбивка] клиент js на localhost: 4000 <==> socket.io на xxx.herokuapp.com – WYH
здесь был задан аналогичный вопрос: http : //stackoverflow.com/questions/12439852/bridging-a-simple-node-js-socket-io-chat-app-with-a-rails-app-on-heroku/14875456#14875456 – WYH