2013-04-14 8 views
0

У меня Socket.IO настроен с помощью node.js, и он работает на моей локальной машине разработки, слушая/подключаясь к порту 8000 (или другому порту, который не является портом моего сервера работает).Socket.IO с Node.js на Heroku

Когда я пытаюсь сделать то же самое на героку, мой импорт сценария на стороне клиента завершается с ошибкой.

Я попытался относительный путь

<script src="/socket.io/socket.io.js"></script> 

Я также попытался выполнить привязку к порту 8000 на Heroku и использовать полный путь к файлу

<script type="text/javascript"> 
     var href = document.location.protocol + document.location.hostname + ':8000/socket.io/socket.io.js'; 
     console.log("href = " + href); 
     document.write("<script src=" + href + "><\/script>"); 
    </script> 

Я читал, что WebSockets не работают на Heroku , поэтому у меня есть следующий код в моем файле after_start.js на сервере. Нужно ли мне что-то делать в дополнение к настройке socket.io для использования транспортов/опросов?

var port = process.env.PORT || 8000; //I've tried hardcoding to 8000 and using process.env.PORT and then I used the relative path for the script import 
io = require('socket.io').listen(port); 
//Configue io to work with heroku 
io.configure(function() { 
    io.set("transports", ["xhr-polling"]); 
    io.set("polling duration", 10); 
}); 

Я получаю эту ошибку, когда я загрузить мой Heroku приложение:

GET http://<myAppName>.herokuapp.com/socket.io/socket.io.js 404 (Not Found) 

Edit: Я на самом деле с помощью Geddy MVC Framework и хотел бы получить эту работу, как она у меня настроить (в основном только как socket.io) на heroku, и я нашел этот ответ, который, похоже, я могу использовать его аналогичным образом: GeddyJS & socket.io: catching and emitting events from server side

+0

Вам нужно сделать socket.io прослушивание на вашем главном экземпляре 'server' (тот, который используется с Express) – SLaks

+0

вы запускаете HTTP-сервер тоже, как экспресс, или просто socket.io? –

+0

обновленный оригинальный пост. Я использую Гедди. –

ответ

0

Ahah! Я забыл включить настройки реального времени geddy в конфиге.

Вот что я сделал:

добавил

, socketIo: true 
, realtime: true 

в конфигурационный файл

Добавлено

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

к after_start.js файлу

использовано geddy.io.sockets.emit( для отправки событий из бэкэнд.

<script src="/socket.io/socket.io.js"></script> импортировать ИО на интерфейсе

и

var href = document.location.protocol + document.location.hostname; 
console.log('href = ' + href); 
var socket = io.connect(href); 

Чтобы открыть разъем от внешнего интерфейса.

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