跳到文章开头
  1. Entire-notes/

使用主从模式搭建一个Socket网络通信模型

·1 分钟
nio
春江花朝秋月夜
作者
春江花朝秋月夜
重湖叠𪩘清嘉。有三秋桂子,十里荷花。羌管弄晴,菱歌泛夜,嬉嬉钓叟莲娃。千骑拥高牙。乘醉听箫鼓,吟赏烟霞。异日图将好景,归去凤池夸。
 ·  页面点击量:
目录

通过NIO非阻塞式模型我们可以搭建一个Reactor-SubReactor-Handler的消息服务器
#

netty的三大基本组件是:buffer,channel,selector

目的:

主要目的是利用Selector选择器实现IO多路复用

先来编写一下客户端,简单起见,只需要建立一个SocketChannel获取管道流传输数据


/**
 * @author 春江花朝秋月夜
 */
public class ClientReactor {
    public static void main(String[] args) {
        // 创建一个新的SocketChannel,一会通过通道进行通信
        try (SocketChannel channel =SocketChannel.open(newInetSocketAddress("localhost", 9000));
                Scanner scanner = new Scanner(System.in)) {
            System.out.println("已连接到服务端!");
            while (true) { // 咱给它套个无限循环,这样就能一直发消息了
                System.out.println("请输入要发送给服务端的内容:");
                String text = scanner.nextLine();
                // 直接向通道中写入数据
                channel.write(ByteBuffer.wrap(text.getBytes(StandardCharsets.UTF_8)));
                System.out.println("已发送!");
                ByteBuffer buffer = ByteBuffer.allocate(128);
                channel.read(buffer); // 直接从通道中读取数据
                buffer.flip();
                System.out.println("收到服务器返回:" + new String(buffer.array(), 0, buffer.remaining()));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

现在来考虑一下服务端模型

设计

由于是主从模式,先是有一个主Reactor作为请求接收器件,然后将任务代理给Sub-Reactor

相关文章

微服务基础知识
·2 分钟
微服务
微信登录
·4 分钟
Oauth2
自用的Vscode个人觉得还算耐看的主题和字体以及编码习惯
·1 分钟
笔记