Grizzly:Java NIO框架

 ,  ,  ,  ,  2

在Java新I/O API(NIO)出现之前,开发可扩展的服务器应用比较困难。Grizzly NIO框架的设计初衷便是帮助开发者更好地利用Java NIO API,构建强大的可扩展的服务器应用,并提供扩展框架的组件:Web框架(HTTP/S)、WebSocket、Comet等。

grizzly

核心框架

  • 内存管理:Grizzly2.0引入了以可以在运行时(runtime)提高内存管理的子系统。该子系统包括三个主要构件:
    • 缓冲区(Buffers)
    • ThreadLocal的内存池(ThreadLocal memory pools)
    • MemoryManager作为一个实用缓冲区和内存池工厂
  • I/O策略:通常我们使用一下两种方处理特定的NIO事件:在接收到的线程直接处理(Same-thread)或者交给工作线程处理(Worker-thread)。
    1. Worker-thread IOStrategy
    2. Same-thread IOStrategy
    3. 动态IOStrategy
    4. Leader-follower IOStrategy
  • 传输和连接:Transport和Connection是Grizzly2.3的核心网络API。
    • Transport定义了网络传输方式如TCP、UDP,包括相关资源(线程池、内存管理器等)和嵌套连接的缺省配置。
    • Connection在Grizzly2.3代表一个TCP或UDP的单一网络连接(很像socket)。
    • Transport和Connection是一对多的关系。
  • 过滤器链和过滤器:过滤器链顾名思义就是多个过滤器组成链。每个过滤器表示一个要执行的处理单元,用于检查并(或)修改由FilterChainContext表示的一个事务的状态。
  • 核心配置:核心框架配置的要点是Transport实例及其相关线程池。
  • 端口统一:有时由于某些管理限制我们只能使用一个端口来发布多个服务,根据请求重定向到相应服务。Grizzly中的“端口统一”就是这个问题的解决方案。
  • 监控:Grizzly提供了监控框架内部关键组件的功能,且允许通过自定义扩展监控组件。

HTTP组件

  • 核心HTTP框架:Grizzly2.3 HTTP框架提供了服务器和客户端的编解码HTTP请求响应数据的功能。除了编解码器本身,框架还包括基本HTTP原语和简化协议相关工作的工具类。
  • HTTP服务器框架
    • 简单的服务器API使Grizzly可以轻松嵌入应用程序。
    • 类似Servlet规范的抽象:HttpHandler (Servlet), Request (HttpServletRequest), Response (HttpServletResponse)。
    • 通过响应挂起/恢复机制提供处理长时间运行的HTTP事务的能力。
    • 支持非阻塞IO流。
    • 静态内容的使用文件缓存。
  • HTTP服务器框架扩展
  • Comet
  • JAXWS:从2.1.2版本开始Grizzly通过HTTP服务器框架支持JAX-WS web服务。
  • WebSockets:Grizzly实现了RFC 6455的要求,同时也支持此协议的旧版本。这对于没有实现最终草案规范的客户端很有用。
  • AJP:从2.1版本开始Grizzly开始支持AJP1.3。
  • SPDY:从2.3版本开始Grizzly支持SPDY/3。SPDY的目标是降低网页加载时间。

开发文档

官方网站:https://grizzly.java.net/index.html
开源地址:https://github.com/GrizzlyNIO/grizzly-mirror

打赏支持我整理更多优质资源,谢谢!

打赏编辑

打赏支持我整理更多优质资源,谢谢!

任选一种支付方式

1 收藏

资源整理者简介:刘立华

java开发,技术爱好者,乐于助人。 个人主页 · 贡献了32个资源 · 1 ·  


直接登录
最新评论
  • *.java Java工程師 2016/10/31

    您好,

    我想請教一個問題,關於Grizzly框架的。因爲業務需求,用Java搭建一個Socket服務器。用來接受其他終端得請求。這裏用了Grizzly框架,但是終端采用的是Socket,并且衹是發送數據,語言也不是Java。請問對此,您有相關的開發經驗嗎?

    個人理解是,衹要是Socket傳輸,應該是衹要監聽端口,這邊傳送數據就可以了。但是現在是終端發送數據,Java端這邊無法接受數據。

    希望能得到您得幫助,不勝感激。

    以上。

     

    • 刘立华 Java工程师 2016/11/05

      对于你遇到的问题,建议先用java写一个简单socket服务端,确定和终端没有问题。没问题了,再通过框架调试。

推荐关注

按分类快速查找

关于资源导航
  • 伯乐在线资源导航收录优秀的工具资源。内容覆盖开发、设计、产品和管理等IT互联网行业相关的领域。目前已经收录 1439 项工具资源。
    推送伯乐头条热点内容微信号:jobbole 分享干货的技术类微信号:iProgrammer