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更轻量化,适用于单向通信和实时数据流推送。然而,它也有局限性,如单向通信、不支持二进制数据传输和需要处理跨域问题等。