Вопрос по node.js, express, socket.io, connect – Socket.IO на поддоменах с vhost Express.js

2

У меня на сервере запущены два приложения Express.js.

Простое ванильное приложение под названием «основное приложение» и другой, который использует Socket.IO под названием «socket-app».

У меня есть "главное приложение" работает на & quot; mydomain.com & quot; & Амп; & Quot; сокет-приложение & Quot; работает на поддомене по адресу "socket.mydomain.com"

Я перенаправляю запросы к приложению-сокету через встроенное промежуточное программное обеспечение vhost Express.

- внутри main-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");
});

Это работает нормально, и я вижу, что мое socket-приложение работает на порте 8080 в socket.mydomain

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

Поэтому мой вопрос: как я могу передать это «обновление»? событие из моего основного приложения в мое приложение сокетов, чтобы все подключенные сокеты могли слышать, когда кто-то подключается & amp; разъединяет?

Я пытался испустить "обновление" событие из & quot; основного приложения & quot; но, похоже, он не работает.

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

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

Потрясающие! Можете ли вы также опубликовать быстрый ответ на свой вопрос и принять его? Увидетьblog.stackoverflow.com/2012/05/encyclopedia-stack-exchange Daniel Mendel
Итак, я понял. Так как Socket.IO & amp; Express.vhost, похоже, не хочет хорошо играть вместе, кажется, что решение состоит в том, чтобы создать экземпляр Socket.IO в вашем главном приложении, а затем передать этот экземпляр в другие приложения, которым необходимо взаимодействовать через сокеты. Вскоре я напишу пример в своем блоге. braitsch

Ваш Ответ

1   ответ
7

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

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

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

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

Update

Вот описание того, как совместно использовать экземпляр Socket.IO между несколькими доменами.

ИЗВИНЯЮСЬ!!! Я не хотел это понижать, просто случайно постучал ...

Похожие вопросы