Skip to content

feat: 将 NIM Gateway 从单实例 node-nim SDK 迁移到 多实例 nim.js SDK,支持多实例 #264

Merged
liuzhq1986 merged 1 commit intonetease-youdao:mainfrom
Aoxiang-001:main
Mar 4, 2026
Merged

feat: 将 NIM Gateway 从单实例 node-nim SDK 迁移到 多实例 nim.js SDK,支持多实例 #264
liuzhq1986 merged 1 commit intonetease-youdao:mainfrom
Aoxiang-001:main

Conversation

@Aoxiang-001
Copy link
Copy Markdown
Contributor

变更概要

将 NIM Gateway 的底层 IM SDK 从 node-nim(C++ 原生模块)迁移到 nim.js(Web SDK Node.js 版),解决了 node-nim 单例限制导致无法同时运行多个 NIM 实例的问题。

变更动机

node-nim 是基于 C++ 的原生模块,存在以下问题:

  • 单例限制:整个进程只能使用一个 appKey 初始化,NIM Gateway 和 Xiaomifeng Gateway 无法同时运行
  • 平台兼容性:原生模块在不同平台/架构需要预编译二进制,打包和分发成本高
  • 稳定性风险:反复 init/uninit 原生 SDK 存在内存泄漏和段错误风险

nim.js(Web SDK Node.js 版 v10.9.76)支持 new NIM() 多实例创建,彻底解决上述问题。

主要变更

新增文件

  • src/libs/nim.js — NIM Web SDK Node.js 版(v10.9.76),支持 V2 消息和会话模块
  • src/libs/nim/*.d.ts — 完整的 TypeScript 类型定义(40 个声明文件)

nimGateway.ts 改造

  • SDK 初始化:require('node-nim') + new V2NIMClient() + client.init()new NIM({appkey, ...})
  • 服务获取:client.getLoginService()v2Client.V2NIMLoginService(直接属性访问)
  • 事件名称:receiveMessagesonReceiveMessagesloginStatusonLoginStatus 等(加 on 前缀)
  • 实例销毁:client.uninit()V2NIMLoginService.logout()
  • 移除独立的 loginService/messageService/messageCreator/conversationIdUtil 字段,统一通过 v2Client 访问
  • 类型增强:v2Clientany 改为 V2NIM 类型

测试验证

  • 编译通过
  • NIM Gateway 正常收发消息
  • Xiaomifeng Gateway 可与 NIM Gateway 同时运行(多实例验证)

@liuzhq1986 liuzhq1986 merged commit a32729b into netease-youdao:main Mar 4, 2026
mammut001 pushed a commit to mammut001/LobsterAI that referenced this pull request Mar 11, 2026
feat: 将 NIM Gateway 从单实例 node-nim SDK 迁移到 多实例 nim.js SDK,支持多实例
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants