RxJava 认识
RxJava是响应式编程库,用于处理异步数据流。它采用事件驱动和链式调用的思想,特别适合处理网络请求、流式数据处理、数据库操作以及UI事件流。RxJava可以让异步代码像写同步代码一样流畅,并且能够优雅地管理线程。
RxJava主要由四个部分组成:Observable(事件源,生产数据)、Observer(观察者,消费数据)、Operators(变换数据)和Schedulers(线程控制)。
Observable和Observer遵循观察者模式,Observable负责发射数据,Observer负责接收数据。在RxJava中,不同的数据流处理方式对应不同的Observable类型,如处理多个数据的Standard Observable、处理大量数据并支持背压的Flowable、只发射一个数据的Single以及只关心操作是否完成的Completable。
Schedulers是RxJava提供的线程调度机制,可以轻松地在不同线程切换任务。常见的调度器有Schedulers.io()用于I/O操作,Schedulers.computation()用于计算任务,Schedulers.newThread()用于每次创建新线程,以及AndroidSchedulers.mainThread()用于Android主线程操作。
Operators是RxJava的最大特点,可以像操作数组一样操作数据流。常见的数据转换操作符有map()用于转换数据,flatMap()用于拆分和合并数据,filter()用于过滤数据,concat()和merge()用于处理多个Observable的串行和并行合并。
实战案例中,可以通过RxJava处理多个API请求,如先请求用户信息,再用用户ID请求订单。同时,可以通过onErrorResumeNext()在发生错误时提供备用方案。此外,将RxJava与Retrofit结合使用可以让网络请求完美支持响应式编程,使得异步处理更加优雅。
chatglm-sdk源码分析
摘要:
该文章主要介绍了ChatGLM SDK的源码解析和个人解析过程,通过SSE、EventSource等基础知识引入,详细阐述了项目的核心类与职责、设计模式和关键实现,如工厂模式、策略模式、建造者模式、适配器模式、观察者模式等。同时,也提到了使用RxJava作为回调类型的使用情况。
核心类与职责:
1. Configuration:负责存储API配置信息,如API_HOST、okHttpClient、openAiApi等。
2. IOpenAiApi:通过Retrofit定义API请求,主要用于非流式请求,如图片生成。
3. GLMExecutor:具体执行请求的核心类,使用OkHttp发送请求,支持流式与同步调用。
4. DefaultOpenAiSession:负责管理Executor,提供对外API入口。
设计模式:
1. 工厂模式(Factory Pattern):用于创建对象,隐藏创建逻辑,如DefaultOpenAiSessionFactory负责会话对象的创建。
2. 策略模式(Strategy Pattern):根据不同的模型类型选择不同的执行策略,如GLMOldExecutor和GLMExecutor。
3. 建造者模式(Builder Pattern):用于构造复杂对象,如ChatCompletionRequest.Prompt的构造。
4. 适配器模式(Adapter Pattern):适配新旧版接口的参数变化。
5. 观察者模式(Observer Pattern):建立一对多的依赖关系,处理异步事件,如通过EventSourceListener处理模型调用的返回事件。
RxJava的使用:
RxJava在这里作为回调类型,主要是用来处理异步操作,它能将观察者模式与函数式编程结合起来,使得异步代码更容易理解和编写。在IOpenAiApi的实现中,使用RxJava来处理API请求,可以更方便地处理异步响应和错误处理。
总结:
该文章详细解析了ChatGLM SDK的源码和设计模式,帮助读者理解其架构设计和核心实现。同时,也介绍了RxJava在回调类型中的应用。对于开发者来说,理解这些设计模式和实现方式,有助于更好地使用SDK并扩展其功能。
Retrofit 是干啥的?
Retrofit是一个网络请求库,用于简化API调用。它允许开发者像调用普通方法一样轻松发起HTTP请求并获取服务器返回的数据。通过Retrofit,开发者只需编写接口,而无需处理底层的HTTP细节。Retrofit基于OkHttp,对OkHttp进行了封装,以提供自动解析JSON和简化线程管理的功能。与传统的网络请求方式相比,Retrofit的代码更简洁,减少了手动解析JSON和创建请求的复杂性。它通过动态代理生成网络请求代码,并在底层使用OkHttp执行请求。Retrofit的主要优势在于代码简洁、自动解析JSON、支持同步和异步请求以及线程管理。总的来说,Retrofit是一个网络请求自动化工具,让网络调用像本地方法一样简单。
SSE、EventSource理解与实践
摘要:
本文介绍了EventSource,它是一种基于服务器发送事件(SSE)的工具或接口,用于从服务器向客户端推送实时更新数据。SSE是一种HTTP长连接机制,允许服务器通过持续的连接推送数据给客户端。EventSource主要包括EventSource接口、EventSourceListener接口和EventSources工具类。通过创建OkHttpClient、构建请求并使用EventSources创建事件源,可以实现SSE通信。EventSource具有自动重连机制,适用于实时数据更新、通知推送等场景。与WebSocket相比,EventSource更轻量化,适用于单向通信和实时数据流推送。然而,它也有局限性,如单向通信、不支持二进制数据传输和需要处理跨域问题等。
uniapp使用原生子窗体subNvue解决视频或者地图等弹窗层级问题
摘要:
本文描述了在App开发过程中遇到的地图加载和弹窗显示问题。使用web-view组件解决地图加载问题后,又面临弹窗无法显示的层级问题。为解决此问题,采用了subNvue作为vue页面的子窗体,以解决层级覆盖和原生界面自定义需求。文章详细阐述了subNvue的使用方式,包括页面结构、pages.json配置、subNvue子窗体的打开关闭以及样式修改,以及与vue页面的通信方式。
uniapp的puls是什么?
摘要:
在uni-app框架中,plus对象提供了访问设备本地功能的方法,如调用原生相机、文件系统操作、蓝牙通信等。这些API主要来源于HTML5+规范,旨在不同的平台上提供统一的接口。使用plus对象前需配置原生插件并确保开发环境支持相应功能。文章给出了调用原生相机、读取文件、蓝牙操作的示例。需要注意的是,plus对象的API可能因平台不同而有所差异,使用时需确保应用获取必要权限,并建议查阅官方文档和API参考。plus对象使uni-app项目能轻松调用原生功能,实现跨平台统一操作。
uniapp中vue与html与nvue通信方式
摘要:
该文章主要介绍了vue与html页面之间的交互以及vue与nvue页面之间的交互。在vue与html页面交互中,通过定时器获取当前页面的webview子页面并发送消息,同时接收来自webview的消息。在nvue注册方式中,介绍了如何在对应页面的style下app-plus中的subNVues进行注册。文章还详细描述了vue页面与nvue子窗体的交互过程,包括打开、关闭子窗体,以及发送和接收消息的过程。最后提到了在nvue页面中如何接收来自vue的消息和向vue发送消息。