簡體   English   中英

使用Express.js vhost的子域上的Socket.IO

[英]Socket.IO on subdomains with Express.js vhost

我的服務器上運行了兩個Express.js應用程序。

一個普通的香草應用程序稱為“ main-app”,另一個使用Socket.IO稱為“ socket-app”。

我在“ mydomain.com”上運行“ main-app”,在“ socket.mydomain.com”上的子域上運行“ socket-app”

我正在通過Express的內置vhost中間件將請求路由到套接字應用程序。

-在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.mydomain上看到我的套接字應用程序在端口8080上運行

但是,當通過vhost運行Socket.IO應用程序時,websockets超時並沒有收到“升級”事件似乎是一個問題,如本文所述

所以我的問題是如何將這個“升級”事件從我的主應用程序傳遞到我的套接字應用程序,以便所有連接的套接字都能在有人連接和斷開連接時聽到聲音?

我嘗試從“ main-app”中發出“ upgrade”事件,但它似乎沒有用。

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

我在這里想念什么?

解決方案是在您的根應用程序中創建一個Socket.IO實例,您的子域應用程序可以全局訪問該實例,然后在其自己的Socket.IO名稱空間中運行每個應用程序以保留其自治性。

我只是構建了一個簡單的示例 ,該示例運行一個聊天應用程序的三個實例,這些實例均共享在根應用程序中聲明的Socket.IO的同一實例。

如果克隆項目並按照說明設置本地子域,則可以看到聊天應用程序的每個實例都獨立於其他實例運行。

我將嘗試撰寫有關該帖子如何在明天早上進行工作的更多詳細信息的博客文章。

更新

這是有關如何在多個域之間共享Socket.IO實例的文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM