Grizzly NIO框架 理论篇 【4】

Port Unification Overview(端口统一)

针对在一个端口上开放多种协议的服务,类似下图:
""
通过Port unification Filter去判断三种协议,然后针对不同协议传递到下一个Filter执行后续工作。
其中Finder的Grizzly官方给了一个简单用例,针对协议包头是"add"的Finder
  1. /**
  2. * {@link ProtocolFinder}, responsible to determine if incoming byte buffer
  3. * represents ADD-service request.
  4. */
  5. publicclassAddProtocolFinderimplementsProtocolFinder{
  6. privatefinalstaticbyte[] magic ={'a','d','d'};
  7. /**
  8. * {@inheritDoc}
  9. */
  10. @Override
  11. publicResult find(finalPUContext puContext,finalFilterChainContext ctx){
  12. // Get the input Buffer
  13. finalBuffer inputBuffer = ctx.getMessage();
  14. finalint bytesToCompare =Math.min(magic.length, inputBuffer.remaining());
  15. finalint bufferStart = inputBuffer.position();
  16. // Compare incoming bytes with ADD-service protocol magic
  17. for(int i =0; i < bytesToCompare; i++){
  18. if(magic[i]!= inputBuffer.get(bufferStart + i)){
  19. // If at least one byte doesn't match - it's not ADD-service protocol
  20. returnResult.NOT_FOUND;
  21. }
  22. }
  23. // if we check entire magic - return FOUND, or NEED_MORE_DATA otherwise
  24. return bytesToCompare == magic.length ?
  25. Result.FOUND :Result.NEED_MORE_DATA;
  26. }
  27. }
这个简单例子应该明白怎么判断了吧,然后就是转到对应的协议
 
-------------------------------
理论学习暂且到此为止,水平实在有限,本人仅使用了基础功能,所以大部分扩展都没有去学习,希望有高人可以补充
 





posted @ 2014-09-04 09:46  张真人  阅读(748)  评论(0编辑  收藏  举报