网络编程&NIO
文章平均质量分 81
英雄郑旺
美团网 基础架构部
展开
-
网络编程之Socket&ServerSocket(一)
Socket和ServerSocket是网络编程非常重要的两个类,前者用于建立客户端套接字,并读写服务器;后者用于创建服务端套接字,监听某个端口并处理到达的客户端请求。按照TCP/IP的四层参考模型 从上到下依次是应用层、传输层、网络层、物理层,而Socket是工作与应用层和传输层之间,它抽象了应用层以下的通信复杂细节,从设计模式的角度将Socket就是一个门面模式。Socket网络编程中对于原创 2017-11-08 13:50:29 · 998 阅读 · 0 评论 -
网络编程之SocketChannel & ServerSocketChannel & Selector
在前面的文章中我们讲过Socket的读是阻塞模式,并且读写都是一个字节或者几个字节,为了提高响应性能往往需要在服务端为每一个请求分配一个线程。后来为了解决传统Socket的这种阻塞低效方式,在jdk1.4之后引入了New I/o(NIO)。原创 2017-11-09 17:53:49 · 2053 阅读 · 0 评论 -
网络编程之Selector & SelectionKey详解(一)
每个选择器selector中会包含三种键的集合,也可以认为是三种状态通道的集合,比较通道和选择键是一一对应的:(1) 注册键的集合,通过register函数进行注册的通道这个集合可以通过Keys()方法返回(2) 已选择键的集合,这个是注册键集合的子集,可以通过selectedKeys()方法返回,该集合中的通道都是准备好执行相应操作的通道(3) 已取消键的集合,这个集合包含了cancel( )方法被调用过的键(这个键已经被无效化),但它们还没有被注销。这个集合是选择器对象的私有成员,因而无法直接访问原创 2017-11-18 12:20:02 · 3073 阅读 · 1 评论 -
网络编程之Selector & SelectionKey详解(二)
这篇博文我希望能总结出一个实用的简单客户端服务器通信示例,我在前面几篇博文中说过,socket通信中存在数据无边界的问题,这样造成不知道read数据是否完成;在前面几篇博文中我们看到在对客户端SocketChannel进行注册感兴趣的事件时,并没有注册SelectionKey.OP_WRITE写事件,是因为写事件注册之后客户端通道大多数情况下都会立即满足可以写数据的条件,即使这个时候服务器逻辑还没有生成要写回去的数据,所以对于客户端SocketChannel的写事件,我们一般不是在注册通道时注册,而是在服务原创 2017-11-18 12:58:19 · 2262 阅读 · 0 评论