在说Dubbo原理之前,要说一下RPC(远程过程调用)原理
computer1客户端发起一次远程调用,想要调用computer2服务端的一个方法,此时就会有一个客户端的一个代理对象,这个代理对象会把请求包括想要调用的方法、参数序列化后,找到服务地址,通过网络传输到服务端代理对象上,这个服务端代理对象会反序列化之后调用computer2中的方法,之后得到返回结果后序列化,再通过网络传输到客户端代理对象,这个客户端代理对象再通过反序列化把结果返回给computer1.
那么,两台服务器是怎么通信的呢?是基于Netty.
下面再讲解一下BIO和NIO
阻塞式IO:BIO
每当服务器收到请求时,都会为每个请求创建线程,在方法没完成之前,线程是得不到释放的。这也就意味着不能同时处理大量请求。
非阻塞式IO:NIO
selector(选择器也可以成为多路复用器)里注册了很多channel(通道),用来监听多个channel,当selector监听到某个channel准备好了,比如说某个connect(连接)过来了;某个accept(接收数据)过来了;某个read(读取)就绪了;某个write(写入)就虚了;就会进行相应的处理。通过一个selector监听多个通道的方式,某个通道的任何一个状态准备好了,就额外开启一个线程进行处理,就不像BIO那样每个请求过来就开启一个线程慢慢阻塞。
Netty:基于NIO多路复用模型。