关于架构:好消息-突破IM开源项目OpenIM采用wasm技术实现jssdk

130次阅读

共计 2675 个字符,预计需要花费 7 分钟才能阅读完成。

客户端 sdk 用 golang 实现,同时采纳 sqlite 存储本地聊天记录,通过 gomobile 生成 sdk,供 iOS Android 调用,达到了了一套代码多端复用的成果。最近交融 wasm 技术,让浏览器具备存储能力,本地聊天记录存储在浏览器,彻底放弃了之前 jssdk server 服务端。WebAssembly 是一种运行在古代网络浏览器中的新型代码,并且提供新的性能个性和成果。它设计的目标不是为了手写代码而是为诸如 C、C++ 和 Rust 等低级源语言提供一个高效的编译指标。对于网络平台而言,这具备微小的意义——这为客户端 app 提供了一种在网络平台以靠近本地速度的形式运行多种语言编写的代码的形式;在这之前,客户端 app 是不可能做到的。而且,你在不晓得如何编写 WebAssembly 代码的状况下就能够应用它。WebAssembly 的模块能够被导入的到一个网络 app(或 Node.js)中,并且暴露出供 JavaScript 应用的 WebAssembly 函数。JavaScript 框架岂但能够应用 WebAssembly 取得微小性能劣势和新个性,而且还能使得各种性能放弃对网络开发者的易用性。webpack5+ 引入形式 1. 获取 npm 包 npm 包主页 npm install open-im-sdk-wasm2. 获取 wasm 所需动态资源在我的项目根目录下的 node_modules 目录下找到 open-im-sdk-wasm 子目录,将其中 assets 文件夹下的所有文件拷贝到我的项目公共资源目录中(public)。文件清单 openIM.wasmsql-wasm.wasmwasm_exec.js 并在您的 index.html 文件中通过 script 标签引入 wasm_exec.js 文件 3. 在你的我的项目中引入 SDK 引入 SDKimport {getSDK} from “open-im-sdk-wasm”;const OpenIM = getSDK(); 可能遇到的问题解决方案:在 webpack 配置中新增配置如下 resolve: {fallback: {path: false,crypto: false,},},

vite 或 webpack4 引入形式第一、二步同上 3. 在你的我的项目中引入 SDK 将 npm 包中的 lib 目录拷贝到我的项目中,如:src/utils/lib。批改 lib/api/index.js 文件中对 web worker 的引入形式。Webpack4.x+ import IMWorker from ‘worker-loader!./worker.js’;- worker = new Worker(new URL(‘./worker.js’, import.meta.url));+ worker = new IMWorker();vite+ import IMWorker from ‘./worker?worker’;- worker = new Worker(new URL(‘./worker.js’, import.meta.url));+ worker = new IMWorker(); 引入 SDK 门路为拷贝后搁置 lib 的门路 import { getSDK} from “@/utils/lib”;const OpenIM = getSDK();4. 引入 loader(webpack4)这一步仅实用于 webpack4 引入,webpack5 或 vite 可疏忽装置 worker-loader 和 worker-pluginnpm install worker-loader worker-plugin - D 在 webpack 中新增配置 const WorkerPlugin = require(“worker-plugin”);…plugins: [new WorkerPlugin()]… 常见问题 1. 如何敞开 wasm 日志打印?答:开发环境下为了调试能够关上 wasm 日志,能够在 wasm_exec.js 文件中找到 console.log(outputBuf.substr(0, nl)); 勾销正文 2. 生产环境 wasm 包体过大?答:生产环境倡议启用 gzip,wasm 模块经压缩仅 5Mb,且仅首次加载或有变动时才会进行全量加载。3. 我的开发环境对于以上引入形式都不实用?答:目前官网仅提供几种常见编译工具的引入教程,若有应用其余编译工具的小伙伴可自行尝试引入,并欢送向文档提供 PR。我的项目介绍 OpenIM 持续领跑开源 IM 畛域,在宽广开发者的反对下,目前 github star 冲破 10k。在数据泄露、信息外泄、隐衷滥用的时代,IM 私有化部署需要旺盛。其中,政企协同办公对 IM 需要猛增,随着信息化技术的迭代降级以及信创产业减速落地和实际,协同办公软件的发展潜力将进一步被开释。“平安可控“逐渐成为第一因素。对于社区交友畛域,暴露出的隐衷平安问题越来越多,私有化部署确保用户数据不泄露。OpenIM 从服务端到客户端 SDK 开源即时通讯(IM)整体解决方案,能够轻松代替第三方 IM 云服务,打造具备聊天、社交、办公性能的 app,目前 sdk 包含 uniapp flutter iOS Android jssdk 等全端笼罩。

github 地址:https://github.com/OpenIMSDK/… 开发者核心:https://doc.rentsoft.cn/#/OpenIM 团队开源一词最后是指开源软件(OSS)。开源软件是源代码能够任意获取的计算机软件,任何人都能查看、批改和散发他们认为适合的代码。开源软件依靠同行评审和社区生产,皆以扩散、合作的形式开发。开源软件由社区开发,而非单个作者或公司,因而通常老本更低、更灵便,寿命比专有软件更长。开源已成为一种超过软件生产界线的静止和工作形式。开源静止旨在利用开源软件的价值和扩散的生产模型,为其社区和行业的问题寻找新的解决办法 OpenIM 邀请寰球技术极客参加技术优化,让开发者轻松集成,让每一个利用都具备 IM 性能,同时思考企业的接入老本、服务器资源以及最重要的数据安全性和私密性。团队来自资深 IM 技术团队,咱们致力于用开源技术发明服务价值,打造轻量级、高可用的 IM 架构,开发者只需简略调用 SDK,即可在利用内构建多种即时通讯及实时音视频互动场景。OpenIM 劣势:开源,平安,牢靠,低成本。对于信息安全器重的电子政务,企业协同办公,OpenIM 都是十分好的抉择。从公司成立之初就将“开源”作为外围策略来推动,开源充分体现了自在、平等、分享的互联网精力。

正文完
 0