首先我们看一下服务器端

文章插图

文章插图
上面把server中基本的是步骤实现了 。现在开始真正的去处理一下 。
第一种情况:链接事件处理

文章插图
第二种情况:读写时间处理

文章插图
到了第五步broadCast方法其实我们可以对此进行一个变化,在这里我们实现的是广播到其他所有client 。但是如果是一对一聊天的话我们就可以单播到指定client 。

文章插图
这就是整个服务器端的开发,当然还要客户端的开发,我们同样来看看 。
(2)client端代码开发
客户端代码说实话就比较轻松一点了 。

文章插图
我们就再来看看,客户端如何处理服务器端返回的数据 。

文章插图
readHandler方法是如何读取呢?

文章插图
到这一步,整个客户端的代码就算是完成了,如果你仔细的捋一遍,其实整个流程还是很清晰的 。
三、总结
虽然NIO这么好其实还是有很多缺点的,在上面的代码量其实你就可以发现了,大量的代码使得我们在构建复杂系统的时候超级麻烦,有时候正是这些技术的不完备,才造成了我们程序员工作量大,压力大,但是科技的进步毕竟是要一点一点发展的嘛 。另外说一句这个NIO还有一个大坑,就是Selector空轮询的时候,导师CPU100% 。不过这种情况我还没试过 。
想要精通NIO的话,这篇文章真的远远不够,顶多算是入门把 。想要真正认识我觉得首先要深入源码,然后就是实际场景中的使用,不过目前来看的话netty和mina框架要比java的NIO好的多,不单单是性能,更重要的是我们的开发效率 。算是在一定程度上避免了我们程序员“钱多话少死得快”的现象了吧 。
推荐阅读
- 茶叶香气的九大类型
- 到底什么才是好茶
- 一篇全面的 MySQL 高性能优化实战总结
- 普洱散茶的冲泡技巧
- 接口设计技巧和最佳实践
- 武夷水仙和凤凰水仙有啥区别
- Python数据类型详解——元组
- 茶叶中的鸭屎香
- linux怎么查看ip地址和网卡MAC地址?独特的ifdata命令你用过吗?
- 192.168.2.1如何访问192.168.1.1的服务器?