【无标题】好消息 突破:IM开源项目OpenIM采用wasm技术实现jssdk

news2025/7/8 18:38:41

OpenIM 客户端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-wasm

2.获取wasm所需静态资源

  • 在项目根目录下的node_modules目录下找到open-im-sdk-wasm子目录,将其中assets文件夹下的所有文件拷贝到项目公共资源目录中(public)。
  • 文件清单
  • openIM.wasm
    sql-wasm.wasmwasm_exec.js
  • 并在您的index.html文件中通过script标签引入wasm_exec.js文件

3.在你的项目中引入SDK

  • 引入SDK
  • import { 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-plugin
  • npm 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/Open-IM-Server

开发者中心:https://doc.rentsoft.cn/#/

OpenIM团队

开源一词最初是指开源软件(OSS)。开源软件是源代码可以任意获取的计算机软件,任何人都能查看、修改和分发他们认为合适的代码。

开源软件依托同行评审和社区生产,皆以分散、协作的方式开发。开源软件由社区开发,而非单个作者或公司,因此通常成本更低、更灵活,寿命比专有软件更长。开源已成为一种超越软件生产界限的运动和工作方式。开源运动旨在利用开源软件的价值和分散的生产模型,为其社区和行业的问题寻找新的解决方法

OpenIM邀请全球技术极客参与技术优化,让开发者轻松集成,让每一个应用都具备IM功能,同时考虑企业的接入成本、服务器资源以及最重要的数据安全性和私密性。

团队来自资深IM技术团队,我们致力于用开源技术创造服务价值,打造轻量级、高可用的IM架构,开发者只需简单调用 SDK,即可在应用内构建多种即时通讯及实时音视频互动场景。OpenIM优势:开源,安全,可靠,低成本。对于信息安全重视的电子政务,企业协同办公,OpenIM都是非常好的选择。

从公司成立之初就将“开源”作为核心战略来推进,开源充分体现了自由、平等、分享的互联网精神。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/37055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2022-11-26】JS逆向之北京百姓网

提示:文章仅供参考,禁止用于非法途径! 文章目录前言一、页面分析二、验证码识别三、验证码获取四、总结前言 目标网站:https://beijing.baixing.com/zhengzu/?page40 一、页面分析 清除cookie,重新刷新网页&#xf…

学生个人html静态网页制作 基于HTML+CSS+JavaScript+jquery仿苏宁易购官网商城模板

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

第八章《Java高级语法》第4节:位运算经典应用举例

实际开发过程中,位运算有着相当广泛的应用,并且相对于算术运算,位运算的计算速度往往更快。本节就讲解一些使用位运算解决问题的经典例子。 8.4.1判断整数的奇偶性 按照传统的思路,判断一个整数的奇偶性是通过用这个数与2求模,看运算结果是否为0。其实使用位运算也能判断…

基于蚁群算法的车辆路径规划问题的研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

四、vue-cli 介绍与使用

一、单页面应用程序 1.1、什么是单页面应用程序 单页面应用程序(英文名:Single Page Application)简称SPA,顾名思义,指的是一个web网站中只有唯一的一个HTML页面,所有的功能与交互都在这唯一的一个页面内…

Python:函数使用

目录 一、函数的基本介绍 函数与方法的区别 函数的定义 二、函数返回值及传参的情况 test01 test02 test03 三、函数嵌套 test04 四、lambda表达式 test05 一、函数的基本介绍 函数与方法的区别 直接调用的是函数 通过对象点出来的是方法 print("hello"…

【Leetcode每日一题:882. 细分图中的可到达节点~~~单源最短路径Dijkstra算法】

题目描述 给你一个无向图(原始图),图中有 n 个节点,编号从 0 到 n - 1 。你决定将图中的每条边 细分 为一条节点链,每条边之间的新节点数各不相同。 图用由边组成的二维数组 edges 表示,其中 edges[i] […

Docker配置nginx

1.Docker安装nginx 安装的命令 sudo docker search nginx docker pull nginx查看是否安装 docker images运行测试nginx docker run --name nginx-test -p 9091:80 -d nginx --name #给你启动的容器起个名字,以后可以使用这个名字启动或者停止容器 -p #映射端口…

Fedora-14源配置

By: Ailson Jack Date: 2022.11.26 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/archives/149.html,排版更好,便于学习,也可以去我博客逛逛,兴许有你想要的内容呢。…

兆易创新GD32 (二)官方工程 Template 和 创建工程

官方例程位于标准库的目录下,详细路径如下 GD32F4xx_Firmware_Library_V3.0.0\GD32F4xx_Firmware_Library_V3.0.0\GD32F4xx_Firmware_Library\Template 文件目录清晰简单。值得注意的是system_gd32f4xx.c 位于CMSIS目录下 CMSIS简单理解ARM公司的统一软件命名规则C…

Spring Security 中的 RememberMe 登录,so easy!

1. RememberMe简介 RememberMe 这个功能非常常见,图 6-1 所示就是 QQ 邮箱登录时的“记住我”选项。 提到 RememberMe,一些初学者往往会有一些误解,认为 RememberMe 功能就是把用户名/密码用 Cookie 保存在浏览器中,下次登录时不…

11.25总结

目录 一.做题总结 1.约瑟夫问题 2.最近请求次数 4.选择题订正 二.最长字符串 三.最长数组问题 一.做题总结 1.约瑟夫问题 我的思路就是先遍历按队员编号添加按顺序初始化每个人的编号. 就建立循环,终止条件就是大小为1 进入每次叫号的循环.让编号不为1的全部移出去 因…

尚硅谷axios笔记——入门学习

这篇笔记不包括源码分析,呜呜感觉时间不够用了还得留时间准备教资面试 axios理解和使用 json-server服务与搭建 终端安装npm i -g json-server 启动服务 json-server --watch db.json 启动在当前文档前 数据去db.json找 查看id为2的页面在http://localhost:3000.…

Linux下调试方法汇总

一、Linux驱动调试方法 Linux驱动调试主要有以下几种方法: 1、利用printk。 2、查看OOP消息。 3、利用strace。 4、利用内核内置的hacking选项。 5、利用ioctl方法。 6、利用/proc 文件系统。 7、使用kgdb。 1.1、printk 这是驱动开发中最朴实无华,同时…

使用 Lambda 表达式的正确姿势,写得太好了叭

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; Lambda 表达式非常方便&#xff0c;在项目中一般在 stream 编程中用得比较多。 List<Student> studentList gen(); Map<String, Student> map studentList .stream() .…

Redis缓存的几个名词,缓存命中、缓存穿透、缓存雪崩、缓存击穿

本文为转载整理&#xff1a;原文地址为【https://zhuanlan.zhihu.com/p/422627839】 1. 缓存命中 缓存命中(cache hit)&#xff1a;当应用程序或软件请求数据时&#xff0c;会首先发生缓存命中。首先&#xff0c;中央处理单元&#xff08;CPU&#xff09;在其最近的内存位置&…

MySQL之BufferPool

文章目录前言一、BufferPool是什么二、BufferPool的组成2.1 结构图2.2 如何读取缓冲页三、BufferPool在MySQL中的作用前言 本文会讲述BufferPool是什么&#xff0c;BufferPool的组成&#xff0c;在mysql中的作用 一、BufferPool是什么 在mysql中是用来缓存磁盘中的页&#xff…

央企招聘:中储粮集团2023公开招聘公告(校招+社招,共700人)

中国储备粮管理集团有限公司2023年度招聘包括校园招聘和社会招聘&#xff0c;计划招募优秀人才700余人。 中国储备粮管理集团有限公司是经国务院批准组建的涉及国家安全和国民经济命脉的国有大型重要骨干企业&#xff0c;受国务院委托具体负责中央储备粮油棉的经营管理&#xf…

SSM毕设项目 - 基于SSM的房屋出租出售系统(含源码+论文)

文章目录1 项目简介2 实现效果2.1 界面展示3 设计方案3.1 概述3.2 系统流程3.2.1 系统开发流程3.2.2 操作流程3.3 系统结构设计4 项目获取1 项目简介 Hi&#xff0c;各位同学好呀&#xff0c;这里是M学姐&#xff01; 今天向大家分享一个今年(2022)最新完成的毕业设计项目作品…

【学习笔记31】JavaScript冒泡排序和选择排序

笔记首发 一、冒泡排序 &#xff08;一&#xff09;核心原理 循环遍历数组&#xff0c;当前单元和下一个单元进行数据比较按照从小到大排序&#xff0c;应该是当前单元小于下一个单元&#xff0c;如果当前单元大于下一个单元&#xff0c;将交换两个单元存储的数据一次循环结束…