Могу ли я настроить socket.io chat на герою?
У меня есть приложение для чата socket.io, которое я загрузил в один из новых керосинов Heroku '.
Теперь у меня почти все работает, но я ударил один камень преткновения. На моем локальном хосте я открываю соединение с сервером сокета с клиентом с помощью:
// lots of HTML omitted
socket = new io.Socket('localhost', {port: 8888});
Но на Heroku я, очевидно, должен заменить что-то другое для этих значений.
Я могу получить порт из объекта процесса на сервере следующим образом:
port = process.env.PORT || 8888
и передать это в представление.
Но что я могу заменить на 'localhost'
?
Ответы
Ответ 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/