Подтвердить что ты не робот

Могу ли я настроить socket.io chat на герою?

У меня есть приложение для чата socket.io, которое я загрузил в один из новых керосинов Heroku '.

Теперь у меня почти все работает, но я ударил один камень преткновения. На моем локальном хосте я открываю соединение с сервером сокета с клиентом с помощью:

// lots of HTML omitted
socket = new io.Socket('localhost', {port: 8888});

Но на Heroku я, очевидно, должен заменить что-то другое для этих значений.

Я могу получить порт из объекта процесса на сервере следующим образом:

port = process.env.PORT || 8888

и передать это в представление.

Но что я могу заменить на 'localhost'?

4b9b3361

Ответ 1

Теперь это изменилось с октября 2013 года, героику добавлена ​​поддержка websocket:

https://devcenter.heroku.com/articles/node-websockets

Использование:

heroku labs:enable websockets

Чтобы включить веб-узлы и не забудьте удалить:

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
}); 

Ответ 2

Правильный способ согласно article в heroku:

io.configure(function () { 
  io.set("transports", ["xhr-polling"]); 
  io.set("polling duration", 10); 
});
socket = new io.Socket();

Это гарантирует, что io.Socket не будет пытаться использовать WebSockets.

Ответ 3

Мне удалось заставить Socket.IO v0.8 работать на кедрах Героку, выполнив следующие действия:

В приложении Express (в CoffeeScript в моем случае):

app = express.createServer();
socket = require("socket.io")

...

io = socket.listen(app);
io.configure () ->
  io.set("transports", ["xhr-polling"])
  io.set("polling duration", 10)

io.sockets.on('connection', (socket) ->
  socket.on('myaction', (data) ->
    ...
    socket.emit('result', {myData: data})

### The port setting is needed by Heroku or your app won't start
port = process.env.PORT || 3000;
app.listen(port);


И в интерфейсе Javascript вашего приложения:

var socket = io.connect(window.location.hostname);
function sendSocketRequest() {
  socket.emit('myaction', $("#some_field").val());
}

socket.on('result', function(data) {
  console.log(data);
}

Полезные ссылки:

Ответ 4

Пробовав каждую комбинацию под солнцем, я, наконец, просто оставил ее пустой. Вот и прекрасно, что прекрасно работает. Вам даже не нужен порт.

socket = new io.Socket();

Ответ 5

У меня также была эта проблема на героку. Мне удалось заставить его работать с именем хоста myapp.herokuapp.com(или просто window.location.hostname, для работы как локального, так и производственного) и установки порта на 80. Я использую SocketIO 0.6.0.

Ответ 6

Не могли бы вы просто разместить свое фактическое имя хоста?

Ответ 7

2011-06-25T21:41:31+00:00 heroku[router]: Error H13 (Connection closed without response) -> GET appxxxx.herokuapp.com/socket.io/1/websocket/4fd434d5caad5028b1af690599f4ca8e dyno=web.1 queue= wait= service= status=503 bytes=

Возможно, это означает, что маршрутизатор heroku infront приложения не настроен для работы с трафиком веб-сокетов?

[обновление] Похоже, что с 6/22/2011 ответ да... heroku не поддерживает socket.io, см. Этот пост: http://blog.heroku.com/archives/2011/6/22/the_new_heroku_2_node_js_new_http_routing_capabilities/