即时通讯(IM)开源项目OpenIM对WebAssembly支持,提升web端体验

news2025/1/19 20:33:46

WebAssembly 是什么?

2019 年 12 月,W3C 标准批准了第四种官方语言:WebAssembly (Wasm)。这种语言在结构、使用和功能方面与以前的语言有很大不同。

WebAssembly 是一种新的编码方式,可以在现代的Web浏览器中运行 - 它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如 C / C ++等语言提供一个编译目标,以便它们可以在 Web 上运行。它也被设计为可以与 JavaScript 共存,允许两者一起工作。

 

对于Web平台而言,WebAssembly 具有巨大的意义——它提供了一条途径,以使得以各种语言编写的代码都可以以接近原生的速度在 Web 中运行。在这种情况下,以前无法以此方式运行的客户端软件都将可以运行在 Web 中。

WebAssembly 被设计为可以和 JavaScript 一起协同工作——通过使用 WebAssembly 的 JavaScript API,你可以把 WebAssembly 模块加载到一个 JavaScript 应用中并且在两者之间共享功能。这允许你在同一个应用中利用 WebAssembly 的性能和威力以及 JavaScript 的表达力和灵活性。

什么时候使用WebAssembly?

开发人员可能希望在两种一般情况下使用 Wasm。一种是作为想要编写性能更高的代码的 Web 开发人员。另一种是作为软件开发人员,希望将现有技能与其他编程语言(如 C++ 或 Rust)结合使用来构建在 Web 上运行并通过 Web 浏览器访问用户的软件,而无需额外的步骤(例如下载和安装程序)。 虽然开发人员在第一种情况下仍需要使用 JavaScript,但他们也可以使用 Wasm 将需要接近原生速度的部分生成为模块并使用 JS 加载它们。这是因为 JS 和 WebAssembly 模块之间双向通信的能力使应用程序能够利用 WebAssembly 的出色性能。

 

开发人员可以继续使用 React 等流行的 UI 库来构建 Web 应用程序的 UI,并间接使用 Wasm 来实现高性能的内部逻辑。Figma 等流行的应用程序通过使用 React 和 C++ 采用了这种技术。 对于第二种情况,开发人员可以使用 Rust、C++ 或 C# 等语言与 Blazor 一起编写 Web 应用程序。或者甚至用 C# 设计一个游戏并轻松将其编译为 Wasm,然后通过网络将其提供给消费者。

简而言之,开发人员可以通过以下方式使用 Wasm:

  • 除了 JS,开发者还可以在 Wasm 中编写高性能的关键性代码,并用 JS 导入。
  • 开发人员可以使用 Wasm 作为编译目标,编写使其他编程语言能够在 Web 上运行的代码。

OpenIM通过WebAssembly解决了什么问题?

OpenIM是由IM技术专家打造的开源的即时通讯组件。OpenIM包括IM服务端和客户端SDK,实现了高性能、轻量级、易扩展等重要特性。开发者通过集成OpenIM组件,并私有化部署服务端,可以将即时通讯、实时网络能力快速集成到自身应用中,并确保业务数据的安全性和私密性。

目前github 11k star,上万开发者,广泛应用在政务协同办公,社交等领域。重点有如下特色

(1)开源:核心代码开源,数据自我掌控,打造全球领先的IM开源社区,括客户端SDK和服务端,打造全球领先的IM开源社区。

(2)易扩展:服务端采用golang实现,首创“一切皆消息”的通讯模型,轻松实现自定义消息和扩展功能。

(3)高性能:支持集群分层治理架构,经受过海量用户检验,抽象在线消息、离线消息、历史消息存储模型。

(4)全平台支持:iOS、Android原生;Flutter、uni-app、ReactNative跨端;React、Vue等所有主流web前端框架;小程序;PC支持Electron。

我们的客户端SDK底层库openim-sdk-core是通过Go语言编写,并通过Gomobile工具打包为AAR和Framework库轻松集成到Android和iOS两端,并且扩展支持了部分主流跨平台开发框架如:Flutter 、ReactNative、Uniapp等。

现在我们借助WebAssembly技术将openim-sdk-core再次移植到了Web平台,底层复用一套代码,降低了SDK的维护成本,同时充分发挥wasm的特性。帮助开发者可以更加快速、稳定的将即时通讯、实时网络能力集成到自身应用中。

同时,我们还借助sql.js(同样使用emscripten将SQLite编译为 webassembly)和IndexedDB在Web环境中增加了消息本地存储能力,这使得SDK整体使用更加高效。当前大多数IM的JSSDK都是直接通过API每次到服务器拉取大量数据,给服务器带来巨大压力的同时也让用户可能获得不太好的体验,如弱网环境下获取聊天记录的漫长等待。但在open-im-sdk-wasm中,因为消息记录都被储存在了IndexedDB中,使得用户可以稳定达到100~200ms内拉取记录的丝滑体验。

github地址:
https://github.com/OpenIMSDK/

官网:https://www.rentsoft.cn/

 

WebAssembly的未来

WebAssembly 是作为客户端技术发明的,但它也被证明在服务器端非常有用。 服务器端 WebAssembly 在现代 Web 和服务端应用程序中都存在至关重要的优势。

  • 高性能。WebAssembly 实现了接近原生的性能。与 Java、Python 或 JavaScript 运行时相比,它可以快 10 倍到 100 倍(这怎么可能?)。它也比 Docker 快得多,尤其是在冷启动和系统访问方面。
  • 安全。WebAssembly 是一个具有基于能力的安全模型的沙箱。它不仅比原生二进制文件更安全,而且比 Docker 这样的操作系统级容器更安全。然而,它提供了对底层系统的访问,包括新的硬件功能。
  • 可移植。WebAssembly 应用程序可以用 C、C++、Rust、Go 编写,并且无需更改即可在不同的操作系统和硬件平台上运行。
  • 易于管理。WebAssembly 程序可以由其他应用程序配置、启动、热交换、停止和移动。

WASI是一种将 WebAssembly 跑在任何系统上的标准化系统接口,当 WebAssembly 的性能逐渐增强时,WASI 可以提供一种可行的方式,在任意平台上运行任意的代码,就像 Docker 所做的一样,但是不需要受限于操作系统。正如 Docker 的创始人所说:

“ 如果 WASM 和 WASI 早在 2008 年就存在,那么我们就不需要创建 Docker。可见 Wasm 是多么重要。服务器上的 WebAssembly 将会是“计算”的未来模式。而现在的问题是缺少标准化的系统接口。希望 WASI 能够胜任这项工作!“

Wasm 虽然起源于 Web,但如今,它已经不止于 Web。那就让我们来一起期待 Wasm 带来的,那个拥有无限可能的世界吧!

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

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

相关文章

[CTF/网络安全] 攻防世界 Web_php_include 解题详析(php伪协议、data伪协议、file伪协议)

[CTF/网络安全] 攻防世界 Web_php_include 解题详析 代码审计PHP_include文件包含漏洞及伪协议PayloadPHP伪协议恶意 PHP 伪协议data伪协议恶意 data 伪协议file伪协议恶意 file 伪协议 知识点及姿势读取目录路径dirname(FILE)读取目录路径实例读取目录文件glob读取目录文件实例…

chatgpt赋能Python-python_check_module

Python Check Module简介 Python是一个非常流行的编程语言,具有易学、易用的特点,因此在算法、数据分析等领域广泛使用。Python Check Module是Python的一个模块,可以用于对Python代码进行静态分析,检测代码中的潜在问题&#xf…

chatgpt赋能Python-python_canal

Python Canal: 让你的代码流畅无阻 Python Canal 是一个简单易用的Python 并行工具,可以帮助你提高应用程序的性能。它使用了现代操作系统的资源管理能力来有效地管理你的多进程和多线程应用程序,这可以使你的应用程序更轻松地处理大规模数据和异步任务…

Python集合:让你的数据去重变得更简单!

集合set是一个无序的、不可重复的元素集合。 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站百万播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取 B站讲的最详细的Python接口自…

使用Win-flex bison生成一个计算器(VS2022)

本文参考网页“Flex和Bison简介和Windows下使用入门”( Flex和Bison简介和Windows下使用入门 | 码农家园 ),使用Win-flex bison生成生成一个计算器(VS2022)。 1. 使用VS2022创建空项目 使用VS2022创建名为MyProject的…

【html】制作一个能生成图片的markdown在线编辑器

markdown是什么,为什么大家都会用它呢,如果你想写文章,写文档,写作,用markdown是最好的选择,它是一个很好用的文档排版工具,觉得好用,何不尝试把它弄下来做成自己的呢,接…

面试题:如何测试登录功能

最近在做一个创新项目,这个项目有二个平台,每个平台都有前后端,故有四个系统,每个系统都有登录功能,而且不同系统代码设计方式都有所差异,所以就这个登录功能而言就要测试四次,看似一个简单的登…

面试官:你的技术看起来像是初级

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

信号完整性分析基础知识之传输线和反射(六):传输线中拐角、过孔等容性负载的反射

测试焊盘、过孔、封装引线,甚至连在传输线中间的小短截线都可以充当集总电容器。下图显示了在走线中间添加电容器时的反射电压和传输电压。由于电容器最初具有低阻抗,因此反射回源的信号将有轻微的负下降。如果在走线的前端附近连接了一个接收器&#xf…

用pip安装cartopy(windows平台),解决GEOS库的问题

对象:cartopy Cartopy官方网站介绍: Cartopy is a Python package designed for geospatial data processing in order to produce maps and other geospatial data analyses. Cartopy是一个Python包,旨在进行地理空间数据处理,以…

Metersphere+jar+beanshell+连接linux

Meterspherejarbeanshell连接linux java编写连接linux代码 使用jsch连接linux&#xff0c;下载jsch包或者使用maven <dependencies><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55<…

小航助学GESP_C++二级模式测试试卷(含题库答题软件账号)

GESP在线模拟训练系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手 答案:A 第1题人们在使用计算机时所提到的 Windows 通常指的是&#xff08;&#xff09;。 A、操作系统B、多…

就业内推 | 国企中电福富专场!多地有岗,CCIE、HCIE认证优先

01 中电福富信息科技有限公司 &#x1f537;招聘岗位&#xff1a;网络工程师&#xff08;北京&#xff09; &#x1f537;职责描述&#xff1a; 1、负责云平台、数据中心网络架构的调整和性能优化&#xff0c;确保网络的性能、稳定和安全性&#xff1b; 2、对网络突发事件、网…

力扣LCP 33. 蓄水

LCP 33. 蓄水 给定 N 个无限容量且初始均空的水缸&#xff0c;每个水缸配有一个水桶用来打水&#xff0c;第 i 个水缸配备的水桶容量记作 bucket[i]。有以下两种操作&#xff1a; 升级水桶&#xff1a;选择任意一个水桶&#xff0c;使其容量增加为 bucket[i]1 蓄水&#xff1…

JVM基础学习---2、总体机制中不重要的部分、方法区、虚拟机栈

1、总体机制中不重要的部分 1.1 本地接口 Native Interface 本地接口的作用是融合不同的编程语言为 Java 所用&#xff0c;它的初衷是融合 C/C程序。因为 Java 诞生的时候是 C/C 横行的时候&#xff0c;要想立足&#xff0c;必须有能力调用 C/C。于是就在内存中专门开辟了一块…

PCB~电磁干扰

电磁辐射 • 两个主要的电磁来源 • 电流穿过一个金属会产生一个磁场 • 在磁场中放置一个磁场会产生感应电流 • 导体的形状会影响流经它的电流所产生的磁场强度&#xff0c;反之变然 EMI&#xff1a;电磁干扰 • EMI:Electro-Magnetic Interference • EMI代表的是一个设…

自动构建之CMake

CMake 链接: 自动构建之MakeFile CMake也是一种用于自动化构建软件项目的工具。Cmake可以自动输出MakeFile文件&#xff0c;并且CMake是一个跨平台的构建系统&#xff0c;对于复杂的、跨平台的项目&#xff0c;CMake可能是一个更好的解决方案。 CMake的脚本文件是在CMakeLis…

chatgpt赋能Python-python_can

Python-CAN: 一个用于控制CAN总线通信的Python工具 什么是CAN总线&#xff1f; Controller Area Network&#xff08;CAN&#xff09;是用于控制器之间通信的一种通信协议。它经常用于汽车、工业自动化和机器人等领域。CAN总线可以连接多个设备&#xff0c;这些设备可以通过总…

离谱,入职比亚迪一个月,我算是开眼了..

去年校招寒冬很多人都收到BYD的offer&#xff0c;看多了把BYD当爷爷拜的分享了&#xff0c;这里我就做个坏人来泼盆冷水。 以下情况仅仅适用于我从同部门同事和室友了解到的&#xff0c;至于这种情况适不适用于整个厂&#xff0c;就看各位怎么理解了。 当然也不是硬黑硬洗&am…

力扣sql中等篇练习(二十四)

力扣sql中等篇练习(二十四) 1 商店中每个成员的级别 1.1 题目内容 1.1.1 基本题目信息1 1.1.2 基本题目信息2 1.1.3 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 SELECT m.member_id,m.name,case when t.r is null then Bronzewhen t.r>0 AND t.r<50 then …