跳到主要内容

3 篇博文 含有标签「rxjs」

查看所有标签

· 阅读需 7 分钟
Auver

本文将以热门的跨平台桌面应用构建方案 Electron 为例,讲讲在跨进程通信中出现的痛点,并使用RxJs解决这些问题,当然这里的方案不仅仅适用于Electron,同样可以复制到如跨页面通信,主页面与 worker 之间的场景。

Electron 主进程和渲染进程间,官方提供了基础的通信能力。例如,在主进程中向渲染进程发布消息的方式为:

webContents.send('ping', 'whoooooooh!')

渲染进程响应方式为:

.ipcRenderer.on('ping', (event, message) => {
console.log(message) // Prints 'whoooooooh!'
})

支持在响应函数中同步(event.returnValue)或者异步(event.reply)的回复消息。对于event.reply来说,其本质是发送一条新的不同类型的消息,该消息指定了接收方。

在实际使用场景里,往往是甲方产生消费需求,发送消息告知乙方其需要消费数据,由乙方生产数据后回复消息供消费者消费。为了方便描述,我们把首先发送消息的甲方称为消费者,回复消息的乙方称为生产者。

· 阅读需 36 分钟
Auver

前言

网易云音乐 PC/MAC/Linux 这三大桌面端,均采用了在原生应用中嵌入前端页面的方式。

通俗地说,就是将一个本地的 HTML 页面在浏览器中打开,但这个浏览器内嵌在云音乐桌面应用内。我们云音乐前端技术团队负责开发这个 HTML 页面,需要在这个页面中使用 JavaScript 相关技术绘制界面,并控制这个页面的交互。播放器、桌面歌词等内容则采用原生技术开发,并在 JS 中注入接口,以供前端调用。

我们需要在这个单一的页面中,为用户提供桌面应用级的体验。在现有的方案中,我们也遇到一些应用体验不佳、开发效率低的问题。在最近一年里,我们也在寻找一些更好的解决方案,期望做得比以前更好。我们调研了一些解决方案,最终决定引入 RxJs,设计一套全新的数据层。

本文会以云音乐桌面端的场景为例,先介绍为了实现桌面应用级的体验,我们的目标是什么,再看看过去我们为了这些目标面临了哪些挑战,最后谈到我们目前在做的,使用 RxJs 应对这些挑战的一些探索。

· 阅读需 10 分钟
Auver

本文翻译自Hot vs Cold Observables

COLD 是指你的生产者在 observable 内部创建。

// COLD
var cold = new Observable((observer) => {
var producer = new Producer();
// have observer listen to producer here
});

HOT 是指当你的生产者在 observable 外部创建。

// HOT
var producer = new Producer();
var hot = new Observable((observer) => {
// have observer listen to producer here
});