# im-web-sdk **Repository Path**: juggleim/im-web-sdk ## Basic Information - **Project Name**: im-web-sdk - **Description**: No description available - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 1 - **Created**: 2024-08-22 - **Last Updated**: 2026-07-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
JuggleIM

JuggleIM Web SDK

高性能、可扩展的开源 Web 端实时通讯 SDK。
基于自研 Protobuf/WebSocket 二进制协议,开箱即用地支持单聊、群聊、直播聊天室、RTC 信令与朋友圈。

GitHub Stars License npm Version npm Downloads Build Status

功能特性 · 快速开始 · 文档 · 生态 · 社区

English | 简体中文

--- ## 为什么选择 JuggleIM? 从零搭建一套可靠、海量的实时通讯系统并不容易。**JuggleIM** 是一套完整的、生产级的 IM 平台,包含服务端、运营后台以及多端客户端。本仓库是它的 **官方 Web SDK**,让你在几分钟内就能上线聊天功能,同时完整掌控自己的协议、数据与基础设施。 - 自研二进制协议:基于 Protobuf over WebSocket,针对低延迟与小包体积深度优化。 - 自动重连与重发:离线消息、ACK 应答、超时重传,弱网下依然稳定。 - 可组合架构:统一的客户端 API 同时覆盖单聊、群聊、聊天室、朋友圈、RTC 信令。 - Web 与桌面同源:同一套 API 同时运行于浏览器与基于 Electron 的桌面端。 - 极轻量:无框架锁定、无重型依赖,支持 Tree-shaking 的 ESM 与压缩后的 UMD 双产物。 ## ✨ 功能特性 - **连接管理** — 多接入点服务列表、智能故障切换、保活心跳、指数退避重连。 - **单聊** — 文本、图片、文件、音频、视频及自定义消息;已读回执与输入状态。 - **群聊** — 成员管理、@提醒、全体禁言、角色权限、消息撤回、引用回复。 - **聊天室(直播)** — 加入/退出、在线人数、全员禁言、广播、自定义属性,适合直播与活动场景。 - **会话** — 置顶、免打扰、未读标记、标签、草稿、服务端排序、多会话类型。 - **消息** — 收发、历史拉取、搜索、撤回、删除、转发、合并、自定义消息类型注册。 - **朋友圈(动态)** — 发布、评论、点赞、时间线。 - **RTC 信令** — 邀请、接听、挂断、忙线、自定义信令,支持音视频通话。 - **在线状态与未读** — 在线/离线、自定义状态、多标签未读计数。 - **离线与推送** — 离线消息拉取与第三方推送通道对接。 - **事件与监听** — 丰富的消息、连接、会话、状态事件系统。 - **TypeScript 优先** — 内置 `.d.ts` 类型定义,开箱即用的完整类型安全。 ## 🚀 快速开始 ### 安装 ```bash npm install jugglechat-websdk # 或 yarn add jugglechat-websdk # 或 pnpm add jugglechat-websdk ``` ### 初始化 ```js import JuggleIM from 'jugglechat-websdk'; const client = new JuggleIM({ appkey: 'YOUR_APP_KEY', serverList: ['wss://im-api.juggle.im/websocket'], upload: { type: 'qiniu', // 也支持 'aliyun'、'aws'、'custom' // upload config... }, log: { level: 'info' } }); ``` ### 连接与发送消息 ```js // 使用服务端下发的 token 建立连接 await client.connect({ token: 'USER_TOKEN', deviceId: 'optional' }); // 监听收到的消息 client.on(client.Event.MESSAGE_RECEIVED, (message) => { console.log('新消息:', message); }); // 发送一条文本消息 await client.sendMessage({ type: client.MessageType.TEXT, targetId: 'TARGET_USER_ID', conversationType: client.ConversationType.PRIVATE, content: { text: '来自 JuggleIM 的问候 👋' } }); ``` ### 创建或加入聊天室 ```js await client.chatroom.join({ chatroomId: 'live-room-001', autoJoin: true }); client.on(client.Event.MESSAGE_RECEIVED, (msg) => { // 处理聊天室消息 }); ``` > 完整的 React / Vue 示例仓库见 **[Juggleim/web-im-demo](https://github.com/Juggleim/web-im-demo)** —— clone、跑起来、上线。 ## 🏗️ 架构 ``` ┌──────────────────┐ ┌─────────────────────┐ │ 你的 Web 应用 │ HTTPS │ JuggleIM 服务端 │ │ (React/Vue/原生) ├────────▶│ (REST: token、 │ │ │ │ 用户、群、消息) │ │ ┌────────────┐ │ WSS │ │ │ │ webim-sdk │◀─┼────────▶│ WebSocket 网关 │ │ └────────────┘ │ Protobuf│ (消息推送、ACK、 │ │ │ │ 在线状态、RTC) │ └──────────────────┘ └─────────────────────┘ ``` SDK 自底向上分为三层:**Socket 层(传输 + 协议)** → **Provider 层(chat / group / chatroom / moment / signal)** → **对外 API(统一 client)**。 ## 🌐 浏览器兼容性 兼容现代浏览器,并通过 polyfill 支持 IE 11+。完整兼容性矩阵见 [`res/cpb.png`](./res/cpb.png)。 | 浏览器 | 版本 | | ------ | ---- | | Chrome | 80+ | | Edge | 80+ | | Firefox| 78+ | | Safari | 14+ | | Electron | 18+ | ## 📚 文档 - 官方文档: - API 参考:[`src/index.d.ts`](./src/index.d.ts) - 示例与教程:[Juggleim/web-im-demo](https://github.com/Juggleim/web-im-demo) - 发布历史: ## 🌱 生态 | 项目 | 说明 | | ---- | ---- | | [im-web-sdk](https://github.com/Juggleim/im-web-sdk) | **本仓库** —— Web SDK | | [im-server](https://github.com/Juggleim/im-server) | 可自托管的 IM 服务端 | | [im-admin](https://github.com/Juggleim/im-admin) | 运营管理后台 | | [im-android-sdk](https://github.com/Juggleim/im-android-sdk) | Android SDK | | [im-ios-sdk](https://github.com/Juggleim/im-ios-sdk) | iOS SDK | | [web-im-demo](https://github.com/Juggleim/web-im-demo) | React / Vue 集成示例 | ## 🤝 参与贡献 我们欢迎任何形式的贡献,包括但不限于: - 通过 [Issues](https://github.com/Juggleim/im-web-sdk/issues) 反馈 Bug - 在 [Discussions](https://github.com/Juggleim/im-web-sdk/discussions) 提交新功能建议 - 改进文档与示例 - 提交 [Pull Request](https://github.com/Juggleim/im-web-sdk/pulls) 请先阅读 **[CONTRIBUTING.md](./CONTRIBUTING.md)**。 ## 💬 社区 有问题或想和其他 JuggleIM 开发者交流?欢迎加入: - Telegram 社区: ## 📄 许可证 Copyright © JuggleIM。基于 **[Apache License 2.0](./LICENSE)** 开源。 --- 由 JuggleIM 团队与所有贡献者用 ❤️ 构建。