首页 > 其他分享 >RPC架构入门

RPC架构入门

时间:2023-03-08 10:32:26浏览次数:30  
标签:架构 入门 OP selector RPC 客户端 SelectionKey Channel 通道


RPC架构入门

传统的socket分析(BIO的阻塞问题)

  • 阻塞点:sever.accept() ;inputStream.read();
  • 单线程情况下只能有一个客户端
  • 用线程池可以有多个客户端连接,但是非常消耗线程。

NIO的特点

  • 单线程可以连接多个客户端
  • 选择器可以实现但线程管理多个Channel,新建的通道都要向选择器注册
  • 一个SelectionKey键表示了一个特定的通道对象和一个特定的选择器对象之间的注册关系。
  • selector进行select()操作可能会产生阻塞,但是可以设置阻塞时间,并且可以用wakeup()唤醒selector,所以NIO是非阻塞IO

通道Channel

RPC架构入门_选择器


如果一个Channel类实现了ReadableByteChannel接口,则表示其是可读的,可以调用read()方法读取;

如果一个Channel类实现了WritableByteChannel接口,则表示其是可写的,可以调用write()方法写入;

如果一个Channel类同时实现了ReadableByteChannel接口和WritableByteChannel接口则为双向通道,如果只实现其中一个,则为单向通道;

#创建FileChannel
RandomAccessFile raf = new RandomAccessFile ("somefile", "r");
FileChannel fc = raf.getChannel( );
#创建客户端通道
SocketChannel channel = SocketChannel.open();
channel.connect(new InetSocketAddress("http://xxx,com", 80));
#创建服务端通道
ServerSocketChannel ssc = ServerSocketChannel.open();
ssc.socket().bind(new InetSocketAddress(80));
#创建UDP包通道
DatagramChannel dc = DatagramChannel.open( );

一个通道通常有4个状态

SelectionKey.OP_CONNECT #连接就绪
SelectionKey.OP_ACCEPT #接受就绪
SelectionKey.OP_READ #读就绪
SelectionKey.OP_WRITE #写就绪

//绑定selector并给通道设置读的权限。
channel.register(this.selector, SelectionKey.OP_READ);

RPC架构入门_选择器_02


标签:架构,入门,OP,selector,RPC,客户端,SelectionKey,Channel,通道
From: https://blog.51cto.com/u_15997399/6107692

相关文章