读书人

创办非阻塞的Socket服务器lt;四gt

发布时间: 2012-11-10 10:48:50 作者: rapoo

创建非阻塞的Socket服务器<四>
今天有一好友问我非阻塞 这一块的东西怎么没有写了。。

其实这两天却是有些浮躁了,看了看设计模式 学习了一些android的知识(毕竟现在

android 是我的工作内容啊)! 然而听到聊友这样的反应从我内心里来说还是很高兴的。

不管怎么说,我只希望我写的这些东西能够给他人一点提示,只要他人能够用得到就好,我就

是一个菜鸟,只不过是吧自己的理解记录一下,希望能通其他人共勉!

----------------------------------

承接 前几篇的内容。。。从前几篇的内容来看都是 细细的说了一下 NIO 包个个类的一些重要方法和属性,当然其实NIO包下并非只有这几个类!那么接下来我们就把这些 例子 综合一下 做一个小小的 实例!

做实例之前我要声明一点,接下来做的实例是我从孙卫琴,孙大姐的书籍中摘抄的,但是前面的理解 都是我个人的思想! 希望大家能明白这一点!

首先我们创建服务端目的在于 使用一个线程来处理三件事情,这样我们就打打提高了线程的

工作效率。

public class Server{private Selector selector;private ServerSocketChannel serverSocketChannel;private int  port = 8000;private Charset charset = Charset.forName("UTF-8");  public Server(){      selector = Selector.open();//这是一个静态方法创建一个 Selector      serverSocketChannel = ServerSocketChannel.open();      //这个地方一定要设置的 前面已经提到了 默认的是阻塞模式的      serverSocketChannel.configureBlocking(false);      //绑定端口      serverSocketChannel.socket.bind(new InetSocketAddress(port));  }  public mainService(){      //你可能会有疑问这个地方注册时候 是不是要注册三个       //SelectionKey.OP_ACCEPT 但是 请记住 serverSocketChannel 就只能       // 关注一个 连接接受时间      serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT);      while(selector.select()>0){        Set selectKey = selector.selectedKeys();        Iterator it   = selectKey.iterator();        while(it.hasNext()){            //这里我们要拿到 key 包含了socket所希望的任何事件            SelectionKey key = (SelectionKey )it.next();            it.remove();            if(key.isAcceptable()){             ServerSocketChannel ssc = (ServerSocketChannel)key.getChannel();             SocketChannel socketChannel = (SocketChannel)ssc.accept();             socketChannel.configureBlocking(false);             ByteBuffer buffer = ByteBUffer.allocate(1024);             socketCHannel.register(selector,SelectionKey.OP__READ | SelectionKey.OP_WRITE,buffer);            }else if(key.isWriteable()){                   writeService(key);            }else if(key.isReadable()){                   readService(key);            }        }      }  }}

这里服务端就先到这里。。接下来会是客户端!
详细的东西 我会

读书人网 >编程

热点推荐