带有 Express.js 虚拟主机的子域上的 Socket.IO

2024-02-24

我的服务器上运行着两个 Express.js 应用程序。

一个普通的应用程序称为“main-app”,另一个使用 Socket.IO 的应用程序称为“socket-app”。

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

我通过 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.mydomain 的端口 8080 上运行

但是,如所讨论的,通过 vhost 运行 Socket.IO 应用程序时,似乎存在 websockets 超时且未收到“升级”事件的问题here. https://github.com/senchalabs/connect/issues/459

所以我的问题是如何将这个“升级”事件从我的主应用程序传输到我的套接字应用程序,以便所有连接的套接字都可以在有人连接和断开连接时听到?

我尝试从“主应用程序”内发出“升级”事件,但它似乎不起作用。

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

我在这里缺少什么?


解决方案是在根应用程序中创建一个可由子域应用程序全局访问的 Socket.IO 实例,然后在其自己的 Socket.IO 命名空间中运行每个应用程序以保留其自主权。

我刚刚建了一个简单的例子 http://chat.braitsch.io运行聊天应用程序的三个实例,所有实例都共享同一个 Socket.IO 实例,该实例在根应用程序中声明。

If you 克隆项目 http://github.com/braitsch/sub.socket.io并按照说明设置本地子域,您可以看到聊天应用程序的每个实例独立于其他实例运行。

明天早上我会尝试写一篇博客文章,详细说明它是如何工作的。

Update

以下是如何跨多个域共享 Socket.IO 实例的文章。 http://www.quietless.com/kitchen/building-a-node-js-chat-application-and-sharing-socket-io-across-multiple-subdomains/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带有 Express.js 虚拟主机的子域上的 Socket.IO 的相关文章

  • nodejs googleapis,authClient.request 不是函数

    我正在像这样的一个函数中创建一个 oauth2client 并返回它 实际上 我确实传递了客户端 ID 秘密 重定向 URL 和凭据 据我检查 这些都是正确的 var OAuth2 google auth OAuth2 var oauth2
  • 如何将子集合添加到 Firestore 中的文档? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 没有关于如何在Firestore中的文档中添加子集合的文档 那么如何使用Web应用程序添加子集合 我尝试了这个但没有成功 如何使用代码
  • Nodemon - 使用配置文件指定扩展监视列表

    有没有办法使用配置文件而不是命令行来指定监视列表 Nodemon 文档中的命令行方法 我尝试使用nodemon json配置文件包含以下内容 ext js json hbs html 返回 扩展名匹配 错误 然后我尝试将配置添加到packa
  • 如何在 NodeJS 中使用 PhantomJS 模拟鼠标悬停或在页面上运行 JS 功能

    NodeJS PhantomJS 使用 Cheerio 进行内容解析 需要解析包含动态加载的div 提示 的网页 该事件可以在许多表 td 上 这是一个示例 当我将鼠标悬停在特定的 td 上时 我看到这个带有数据的橙色块 它动态加载了函数
  • 有没有办法让 npm install (命令)在代理后面工作?

    阅读有关代理变量的信息 npmrc文件 但它不起作用 尽量避免手动下载所有需要的包并安装 我这样解决了这个问题 我运行这个命令 npm config set strict ssl false 然后将 npm 设置为使用 http 而不是 h
  • socket.io 服务器的 Node.js 客户端

    我有一个正在运行的 socket io 服务器和一个带有 socket io js 客户端的匹配网页 一切正常 但是 我想知道是否可以在另一台机器上运行一个单独的 node js 应用程序 该应用程序将充当客户端并连接到提到的 socket
  • 使用 NodeJS 从 GCP 存储下载对象

    我在用着 google cloud 存储 https www npmjs com package google cloud storage从节点应用程序访问 Google Cloud Storage 存储桶内的对象 但我无法使其工作 我已在
  • 使用sequelize 根据express.js 中的路由更改数据库连接

    是否可以更改数据库连接sequelize取决于路线 例如 用户可以访问网站中的 2 个不同安装 example com foo example com bar 登录后用户将被重定向到example com foo为了获得他们的所有任务foo
  • 如何使用 Node.js 在 Firebase 中注册用户?

    PROBLEM 0 用户是在 Firebase 的身份验证系统中创建的 我在 身份验证 选项卡中看到它 1 但没有对数据库进行任何更改 2 页面似乎无限加载 3 控制台仅记录 Started 1 CODE router post regis
  • 从字符串中删除货币符号并使用 Javascript 中的单行转换为数字

    我下面有一个字符串 它是以英镑为单位的价格 我想删除货币符号 然后将其转换为我可以用来与另一个值进行比较的数字 价格 例如 X gt Y 14 50 我之前已将字符串转换为用于货币的数字 var priceNum parseFloat pr
  • JavaScript 中的 Promise.all:如何获取所有 Promise 的解析值?

    我编写了以下node js文件 var csv require csv parser var fs require fs var Promise require bluebird var filename devices csv var d
  • 在 NPM 上捆绑并发布客户端 Web 代码

    我制作了一个 JavaScript 文件 假设它的内容是这样的 let myCoolAlert str gt alert str in a different js file SO doesn t allow you to cross fi
  • 托管 React 应用程序和 Express 服务器 cpanel

    我是托管新手 如果有人可以非常详细地解释 这将对我有很大帮助 我有以下问题 我有前端使用react app和后端使用expressjs and mysql 我的计算机中有一个可以运行的简单应用程序 我使用本地主机启动后端和前端 它们工作完美
  • 垃圾收集器不适用于 NodeJS / Chrome 中的类型化数组

    我最初将其记录为原项目中的一个问题 https github com nodejs help issues 3590 它立即转移到帮助主题 没有很好的解释 所以现在我想在这里提问 如果我们在 NodeJS v14 v16 v17 中运行以下
  • Javascript 中的面向对象方法

    是否可以使用面向对象的方法在 Java 脚本中 我在中使用 JavaScript服务器端和客户端使用node js 当前我正在使用查询来进行CRUD操作而不是查询是否可以使用DTO S将数据保存在数据库中 是的 您可以使用原型继承来模拟它
  • 排除 npm 包中的测试代码?

    The 开发依赖 https docs npmjs com files package json devdependenciesnpm 的 package json 文档的部分说要在那里列出您的测试依赖项 以便您的包的用户不必拉取额外的依赖
  • 从活动目录读取objectGUID

    我正在尝试使用 node js 从 AD 获取信息 我试过了activedirectory and ldapauth fork一般来说 代码可以工作 但如果我需要一些octetstring数据如objectGUID 我在对象中看到了垃圾字符
  • 如何在特定天数限制后从温斯顿日志中删除文件?

    我正在使用winston将文件记录到按预期工作的服务器中 现在我想设置天数限制 假设3天后我想删除3天前记录的文件 是否可以使用winston轮换来实现 main js winston add winston transports File
  • 无法安装js-bson

    我正在使用Windows 7 64位 尝试安装bson作为mongodb的依赖项 我收到此错误 npm WARN package json email protected cdn cgi l email protection No READ
  • CSS 未使用 req.params 或其他内容加载

    我对节点 表达等非常陌生 我制作了一个博客应用程序 但遇到了问题 我正在使用 mongoose node express 和 ejs 当我打电话时 router get posts function req res Post find fu

随机推荐

  • Google Drive API 进度条错误

    我编写了以下代码来将文件上传到我的 Google 云端硬盘帐户 它工作得很好 然后我尝试添加一些上传进度跟踪器 但遇到了一些问题 它可以工作 但进度几乎立即达到 100 远远早于上传完成 export async function uplo
  • 使用常量引用删除引用

    对于参数类 C 我希望始终获得 原始 类型 而不管指针 const 或引用修饰符如何 template
  • (gcloud.app.deploy) 错误响应:[13] 意外错误

    当我尝试将 Spring Boot 应用程序部署到谷歌云时 出现以下错误 gcloud app deploy Error Response 13 Unexpected Error 我正在使用 com google cloud tools a
  • 提交PHP后保留表单中的值

    我从控制器调用这些函数来获取表单和表单中的值 我的问题是 提交失败后如何保留表单中的值 我尝试过这样的事情
  • Apache Spark 在分区数量较少时内存不足

    我有一个Spark应用程序总是内存不足 集群有两个节点 RAM大约30G 输入数据大小大约几百GB 该应用程序是一个 Spark SQL 作业 它从 HDFS 读取数据并创建一个表并缓存它 然后执行一些 Spark SQL 查询并将结果写回
  • C libpcap API 提取 DNS 查询

    我正在尝试使用 libpcap api 从捕获的 DNS 数据包中提取 DNS 查询 但是我的结构一定有问题 在最后一次转换 使用结构问题 之后char name指针指向正确的地址 查询名称的开头 但它只包含 42 45 20 00 但应该
  • 向客户端发送数据(数据是一个有大原型的对象)

    想要更新一个使用迄今为止创建的所有聊天室列表登录的新客户端 假设我做了这样的事情 每次有人加入应用程序时 socket emit updateClient rooms rooms是一个对象 由许多组成room的实例Room对象本身很小 但有
  • 如何将数据导入rails?

    我有一个带有 User 类的 Rails 3 应用程序 以及一个我想要导入的制表符分隔的用户文件 如何在 Rails 控制台之外访问 Active Record 模型 以便我可以编写脚本来执行以下操作 require active reco
  • 叠加两个或多个位图以在 Picturebox 中显示 (C#)

    在我的 C 程序中 我有一个 Picturebox 我想在其中显示视频流 连续帧 我收到原始数据 然后将其转换为位图或图像 我可以一次显示一张图像 没有问题 重现视频流 现在我的问题是我想要合并 2 个或多个具有相同大小和 alpha 值
  • 如何使用 StAX XML 解析器捕获属性事件?

    我尝试使用 StAX XML 解析器解析 XML 文件 它给我START ELEMENT and END DOCUMENT事件但没有ATTRIBUTE事件 我怎样才能收到ATTRIBUTE使用 StAX 解析器的事件 My XML
  • 验证错误后,后续 ajax 请求从 UI 组件获取值,而不是从 Bean 获取值

    在我基于 JSF 2 的应用程序中 我有一个表单 其中包括 以及其他 UI 组件 一些复选框 在复选框上 我注册了 ajax 请求 在选中它们时会触发这些请求 ajax 请求实际上只会更新支持 bean 中另一个复选框的值 因此 另一个复选
  • 如何从 Jinja 2 模板获取当前变量列表?

    如果我像这样返回 Jinja2 模板 return render response home htm context 那么如何从模板中获取上下文中的变量列表 从技术上讲 由于上下文不是作为命名字典传递的 因此需要做一些工作才能从模板内部生成
  • H1 在左边,“按钮”在右边,垂直对齐

    我试图在一行上显示 与包含框左侧对齐的 H1 元素 几个 按钮 此处为 A 元素 与包含框的右侧对齐 都在同一基线上 是否可以用最少的标记 即没有换行元素 来做到这一点 而不必设置精确的高度 行高 边距顶部等 div h1 What a g
  • 通过 Visual Studio 2010 安装 .NET Framework 作为 ClickOnce 应用程序部署的一部分时出现错误代码 5100

    在 Visual Studio 2010 中 我已将应用程序设置为面向 NET Framework 版本 4 和 所有 CPU 由于我们的一些用户是 64 位 而其他用户是 32 位 我假设用户会选择 所有 CPU 那是对的吗 在特定用户的
  • 将 PHP 数组排序为列

    我有一个 mysql 表 其中包含以下字段 名称 年份 描述 我想按年份按顺序显示 但想按十年分成列 我的 PHP 技能相当薄弱 所以我只知道如何根据年份范围进行单独的查询
  • 为 UIButton 添加背景阴影

    如何给图片添加浅灰色阴影UIButton 我现在不想要一个方法来做到这一点 它应该是这样的 UIButton button1 button1 layer shadowOpacity 0 8 等等 但这不起作用 它只会在按钮内部添加阴影 但我
  • JUnit 5 - 为整个测试套件提供设置和拆卸

    我的要求是为一组测试完成一些初始化 并在所有测试完成后将其清除 这些测试涉及一些测试类 因为它们并不密切相关 但需要共同的初始化 我在用 SelectClasses形成套件并尝试利用 ExtendWith使用应该处理预处理和后处理的自定义扩
  • 如何使用 Ruby on Rails 操作 DOM

    正如标题所说 我有一些 DOM 操作任务 例如 我想 找到所有具有蓝色的 H1 元素 查找所有大小为 12px 的文本 ETC 我怎样才能用 Rails 做到这一点 谢谢 Update 我一直在根据这篇论文做一些关于提取网页内容的研究 gt
  • 科尔多瓦人行横道不建造

    我相信我下载过的每个版本的 Crosswalk Cordovahttps download 01 org crosswalk releases crosswalk android https download 01 org crosswal
  • 带有 Express.js 虚拟主机的子域上的 Socket.IO

    我的服务器上运行着两个 Express js 应用程序 一个普通的应用程序称为 main app 另一个使用 Socket IO 的应用程序称为 socket app 我在 mydomain com 上运行 main app 在 socke