2012-05-20 3 views
2

У меня на моем сервере два приложения Express.js.Socket.IO на субдоменах с Express.js vhost

Обычное приложение для ванили, называемое «главное приложение», а другое, использующее Socket.IO, называемое «сокет-приложение».

У меня есть «главный-приложение» работает на «mydomain.com» & «сокет-приложение» работает на подобласти в «socket.mydomain.com»

Я маршрутизации запросов на сокет-приложение через Встроенное промежуточное ПО vhost Express.

- внутри главных-app.js -

var express = require('express'); 
var app = module.exports = express.createServer(); 
app.use(express.vhost('socket.mydomain', require('./socket-app/app.js'))); 

app.listen(8080, function(){ 
    console.log("Express server listening on port %d in %s mode"); 
}); 

Это прекрасно работает, и я могу видеть свой сокет-приложение работает на порту 8080 на socket.mydomain

Однако, как представляется, проблема с тайм-аутами веб-гейтов и не получение события «обновления» при запуске приложения Socket.IO через vhost, как обсуждалось here.

Итак, мой вопрос: как я могу передать это событие «обновления» из моего основного приложения в мое socket-app, поэтому все подключенные сокеты могут слышать, когда s omeone подключается & отключается?

Я пробовал испускать событие «обновления» из «основного приложения», но он, похоже, не работает.

app.on('upgrade', function(req, socket) { 
    socket.emit('upgrade', app);  
}); 

Что мне здесь не хватает?

+0

Так что я получил его. Поскольку Socket.IO и Express.vhost, похоже, не хотят хорошо сочетаться друг с другом, кажется, что решение состоит в том, чтобы использовать создание экземпляра Socket.IO в главном приложении, а затем передать этот экземпляр в другие приложения, которые должны связываться через сокеты , Я скоро напишу пример в своем блоге. – braitsch

+0

Удивительный! Можете ли вы также быстро отправить ответ на свой вопрос и принять его? См. Http://blog.stackoverflow.com/2012/05/encyclopedia-stack-exchange/ –

ответ

7

Решение состоит в том, чтобы создать один экземпляр Socket.IO в корневом приложении, доступ к которому можно получить в глобальном доступе в ваших приложениях субдомена, а затем запустить каждое приложение в собственном пространстве имен Socket.IO, чтобы сохранить их автономию.

Я только что построил simple example, который запускает три экземпляра приложения чата, которые используют один и тот же экземпляр Socket.IO, который объявлен в корневом приложении.

Если у вас clone the project и следуйте инструкциям по настройке локальных поддоменов, вы можете увидеть, как каждый экземпляр приложения чата работает независимо от других.

Я попытаюсь написать сообщение в блоге с подробной информацией о том, как это работает завтра утром.

Update

Here's a write up of how to share a Socket.IO instance across multiple domains.

+0

Извините! Я не хотел понижать это, я просто случайно постучал ... – coma

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