最简单的nio server编程

19 篇文章 0 订阅

原文地址: http://rox-xmlrpc.sourceforge.net/niotut/

 

1. Use a single selecting thread

 

使用单线程处理selectors, selectors are threadsafe their key sets are not

 

2. Modify the selector from the selecting thread only

从选择线程里修改selector

 

3. Set OP_WRITE only when you have data ready

仅仅准备好写数据的时候, 才设置OP_WRITE

 

4. Alternate between OP_READ and OP_WRITE

在OP_READ和OP_WRITE之间交替处理

 

 

流程: 

 

1. Server端:

 

(1) 创建一个包含Selector的线程

(2) 初始化Selector, bind服务器端的channel, 此channel监听OP_ACCEPT

(3) 当有链接进程来, 创建channel, selector上监听此chanel的OP_READ

(4) channel上有数据进来后, 读取数据, 扔给业务线程处理此channel的数据, 最后, 回写数据时,

将数据传递给Selector线程, 特别注意, 回写时, 要wakeup() selector, 避免一直在OP_ACCEPT和

OP_READ上等待

(5) selector上要写数据的channel, 改为监听OP_WRITE

(6) 向channel里写数据, 若数据写完, 则改监听为OP_READ

 

2. Client端:

 

(1) 创建一个Selector

(2) 发送数据之前, 创建到服务器段的链接, 注册并添加OP_CONNECT的监听, 同时先缓存要写的数据, selector要被wakeup, 方便处理建立链接的监听

(3) 若简历链接成功, 完成连接建立, 改为监听OP_WRITE

(4) 当要发送的数据完成后, 改监听为OP_READ

(5) 读取数据, 并处理

 

只要不是selector的select后续的处理, 其他异步的写数据, client建立链接等, 均需要调用selector的wakeup

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值