Netty学习(1)

其实到这家公司也有一段时间了,现在的公司是个做通信的公司,所以有一些知识不得不去学习。
刚来不久就要求用netty做一个通信的模拟。我来这个公司之前连socket是什么都不知道,突然有点想要放弃,但是既然来了便也希望能够安下心去学习些东西好好工作
既然不得不学习了,那也只有硬着头皮去扣了。这里只是我对自己的一个知识梳理。
首先是SOCKET:
我的理解,就是描述ip地址,端口号的,服务端监听,客户端生成socket连接服务器,服务端生成一个socket,就可以进行通信了。
然后是NIO:
NIO有四大主要概念:Channel, Selector, SelectionKey, Buffer。Netty中同样也少不了这些,并且出于性能和设计上的考虑,对它们进行了扩充。比如netty的buffer包,重新定义了Buffer,提供了各种各样的实现,比jdk中自带的Buffer更加高效与好用。举例来说,jdk中的buffer在读完数据写之前,必须调用一个flip()方法,否则数据出错但不报错,这很容易引起bug。而Netty的Buffer中增加了一个write index,将读写分开,解决了这个问题。另外,jdk的buffer是固定的,而netty还提供了一个可变长的buffer,方便操作。而Channel在Netty中也重新设计,提供了很多种Channel,照顾到不同程序的需要。而Selector和SelectionKey,还是使用jdk自己的。
重要的地方,是Netty定义了很多事件,如connected, messageReceived, messageSent等等。我们可以继承一个Handler,来实现对应的操作,它们将在对应事件发生的时候,被自动调用。这就是“事件驱动”。
为了简化操作,我们还可以使用Encoder和Decoder将传送于网络间的二进制数据与我们操作的pojo进行互转,这样在程序中无须直接操作底层数据。
Netty提供了不少协议的实现,如http等,让Netty有了初步的处理http请求的能力。其http的encoder和decoder,在底层处理http请求的交互数据,将其变为了request, cookie, response等对象。因此现在有很多web框架尝试将Netty作为自己内嵌的http服务器,以达到更佳的性能与方便的操作。不过据我观察,Netty提供的支持还比较简单(如request, response等类中,方法很少),如果真要使用,还需要对它进行扩展。
Netty使用一个Boss线程来处理新连接,而将数据读取和处理等,分给若干个Worker线程。它在内部其实还是使用了“轮询”,去调用selector.select()得到可用事件,最终转变为对Hander中相关回调方法的调用。
我对NIO的理解:
四大概念。对于io操作增加了buffer缓冲区,还有就是一个非阻塞。
非阻塞:应该就是如果有数据什么的需要处理,相应的事件驱动会被调用,不需要轮询。

Channel、Buffer

Selector:这个类似一个观察者,只要我们把需要探知的socketchannel告诉Selector,我们接着做别的事情,当有事件发生时,他会通知我们,传回一组SelectionKey,我们读取这些Key,就会获得我们刚刚注册过的socketchannel,然后,我们从这个Channel中读取数据,放心,包准能够读到,接着我们可以处理这些数据。

©原创文章,转载请注明来源: 赵伊凡's Blog
©本文链接地址: Netty学习(1)

“Netty学习(1)”的28个回复

  1. Pingback: pay day loans
  2. Pingback: Blue Coaster33
  3. Pingback: get satellite tv
  4. Pingback: car parking
  5. Pingback: lan penge online
  6. Pingback: fue.mobi
  7. Pingback: parking
  8. Pingback: alkaline water
  9. Pingback: alkaline water brands
  10. Pingback: water ionizer
  11. Pingback: paypal loans
  12. Pingback: you can look here
  13. Pingback: p wilkes electrician
  14. Pingback: jib plumbers rates
  15. Pingback: house blue
  16. Pingback: HD Coloring Pages
  17. Pingback: ionizer payment plan
  18. Pingback: visit site
  19. Pingback: alkaline water
  20. Pingback: car insurance
  21. Pingback: alkaline water
  22. Pingback: great post to read
  23. Pingback: click this

发表评论

电子邮件地址不会被公开。 必填项已用*标注