WebSocket
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允
许服务器主动发送信息给客户端。
在WebSocket协议协议产生之前,双工通讯是通过客户端向服务端不停的发送HTTP请求,从服务端拉取数据
更新来实现的。这样做造成了客户端的HTTP轮询的滥用,并且效率是底下的。
subscribeOn用来切换事件流上游所在的线程;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22Observable.create<Int> {
it.onNext(1)
it.onNext(2)
it.onNext(3)
it.onComplete()
}.map {
it.toString()
}.flatMap {
Observable.just(it)
}.subscribeOn(Schedulers.io()).subscribe(object :Observer<String>{
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
}
override fun onError(e: Throwable) {
}
})
observeOn用来切换事件流下游所在的线程;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Observable.create<Int> {
it.onNext(1)
it.onNext(2)
it.onNext(3)
it.onComplete()
}.map {
it.toString()
}.flatMap {
Observable.just(it)
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(object :Observer<String>{
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
}
override fun onError(e: Throwable) {
}
})
1、RxJava中的操作符,照目前的理解,大体可以分为两类:一类是由static修饰的类操作符,这类操作符代
表有create、just等,它们用来引起一个Rx数据流;另一类则是实例操作符,这一类操作符必须得有Observable
实例才能够调用,代表有map、flatMap等,它们一般作用于数据流的中间环节,起到操作数据流的作用;
2、我们把Rx操作认为是一个数据流,并分为上游和下游,最上游即我们开始Rx操作的地方,一般以
Observable.create、Observable.create等类操作符开始,而最下游则是我们调用subscribe,并为
其传递一个Observer为终点;可以这样认为,除了最上游,每一个操作符都有自己的上游操作符,除了最下游,
每一个操作符都有自己的下游操作符;
map和flatMap可以说是Rx操作符中使用频率最高的操作符,它们的区别:
1、对于map,执行过程中,只有一个事件流,我们操作的是流中的内容,可以理解为操作Observable
中的T,将其装换为另一种类型O,即Observable
2、对于flatMap,其作用就是把原先一个事件流转化为多个事件流,比如有一个集合,原先一个事件流,集合
中的元素是线性的,一个一个被发送,而通过flatMap,将集合中的每个元素又转化为一个新的事件流,所有
事件流同时发送结合中的每个元素,这些元素被接收时是无序的;
查看ObservableFlatMap源码可以发现,每一个flatMap操作符生成的Observable都开启新的、独立
的订阅流程,这些订阅流程的Observer都持有了当前ObservableFlatMap的Observer,他们发送的数据
(onNext)最终都汇聚到了ObservableFlatMap的Observer中,通过该Observer在往下一个操作符发送
(onNext);
在将一种数据类型的Observable转换为另一种数据类型的Observable时,如果整个流程只有发送一个数据,
那么使用map进行转换即可,完全没有必要通过flatMap来转换