阅读更多
Firefly是一个高性能的一站式Java Web框架,涵盖了web开发的主要技术栈,包含模板引擎、IOC/MVC框架、HTTP服务器、Common工具、Log、Json解析器等模块。

项目主页:http://www.fireflysource.com/
Github地址:https://github.com/hypercube1024/firefly

为了使大家对Firefly有进一步的了解,本期我们采访了Firefly的作者邱鹏滔

ITeye期待并致力于为国内优秀的开源项目提供一个免费的推广平台,如果你和你的团队希望将自己的开源项目介绍给更多的开发者,或者你希望我们对哪些开源项目进行专访,请告诉我们,发站内短信给ITeye管理员或者发邮件到webmaster@iteye.com即可。

先来个自我介绍吧! Top

我叫邱鹏滔,来自武汉,毕业后一直在北京,工作6年,目前在一家大型互联网公司工作。

我主要用的编程语言是Java,平时也研究一下iOS或者其他的编程技术,最近看了《黑客与画家》,对Clojure开始有些兴趣了

Firefly是什么?有哪些功能? Top

Firefly是一个一站式高性能Java Web框架。Firefly使用简单,在main函数中只需一行代码就可以启动一个Web服务,并且超级轻量,jar包总共500k,启动一个Web服务不到1秒。非常适合注重开发效率和服务性能的互联网应用。

Firefly提供的主要功能如下:

  • IOC/MVC框架
  • 模板语言
  • HTTP服务器
  • Json解析
  • 异步日志

你开发这个项目的初衷是什么?这是SSH的一个“轮子”吗? Top

在开发Firefly之前也一直用开源的Java框架,比如Spring、Struts、Hibernate、iBatis等等,但是始终觉得用这些框架搭建开发环境比较麻烦,其中一些框架升级之后兼容性也是个问题,而且SSH比较臃肿,运行速度慢。

心目中理想的web框架,应该在80%情况下不需要繁杂的配置就能运行并且轻量快速,所以决定开发Firefly作为SSH的替代方案

Firefly的确又是一个轮子,不过是一个更好的轮子,哈哈 ^_^

Firefly 的设计思想? Top

Firefly是基于约定优于配置的思想,框架会自动执行约定的或者被标注的函数,参数也是可变的。

Firefly是无侵入的, 程序不需要实现任何接口,不会对业务代码产生污染。并且框架本身不依赖任何第三方jar包,不会发生框架依赖的第三方包和业务代码的依赖包产生冲突。

Firefly非常注重功能的实用性,对于平时不常用的功能不会添加到Firefly当中,这样可以避免像其他开源框架那样过于臃肿。

个人认为保持代码的简洁非常重要,代码越少越容易阅读,修复bug也越容易。借用C.A.R. Hoare的名言:软件设计有两种方法:一种是尽可能地简单,这种设计明显没有什么缺陷;另一种是尽可能地复杂,这种设计没有明显的缺陷。

Firefly包含了哪些组件和模块?都有什么特性? Top

Firefly包含IOC/MVC框架、模板语言、HTTP服务器以及Common工具类四大模块:

  • IOC/MVC框架支持RESTful URL、拦截链、多视图渲染等特性。
  • 模板语言编译方式执行性能很好,支持条件选择、循环、自定义函数等操作。
  • 基于nio开发的Web服务器支持HTTP1.1协议的大部分特性,支持动态模板页面、静态文件,本地Session支持,也可以自己实现接口支持远程Session。
  • Common工具包里面有各种常用的工具类,比如:Json解析、异步日志、LRUConcurrentHashMap等。

相比其他框架(SSH、Nutz等),Firefly的特点是什么? Top

Firefly是一个Web开发框架,所有的功能都聚焦在Web开发上面,没有数据访问以及ORM功能。主要是考虑到面对互联网海量用户,关系型数据库不一定是数据存储的最佳选择,很多NoSQL数据库能直接支持对象存储。如果使用关系数据库个人更喜欢类似Apache DBUtil那样的工具类而不是ORM。

SSH和Nutz框架在功能上比Firefly要丰富的多,但是Firefly在提供了日常Web开发的大部分功能的情况下,相比SSH更轻量,使用更简单,性能也要好得多。自身还提供了HTTP服务器,不需要部署直接就能通过main函数启动,非常方便 :-)

Firefly的性能如何? Top

因为在互联网公司工作,我们的业务每天数亿PV,面对海量用户,所以平时开发程序也会对性能比较敏感。

开发Firefly的时候也会比较关注性能这块。Firefly能轻松跑满网卡流量,整体性能上比 Spring + Tomcat的组合快3倍。在我的MacBook上(双核2.3G)用Apache AB测试10w请求、100并发在3w req/s,同等硬件配置 Spring + Tomcat只能达到1.2w req/s。模板语言比FreeMarker快 1.5~2 倍,JSON序列化速度是Gson的4~8倍。

Firefly的学习成本? Top

有Spring使用经验的能直接上手,Firefly保留了很多Spring的使用习惯,而且比Spring更简单。

使用Firefly时需要注意哪些问题? Top

Firefly在使用自带的HTTP服务器时不支持JSP只能使用Firefly模板语言,在标准Java EE服务器中可以使用JSP。

采用什么开源协议?用户如何交流、反馈、参与贡献? Top

Firefly使用商业友好的Apache 2.0协议,可以直接在GitHub上发起pull request。

未来的开发计划? Top

最近研究了一下Jetty的SPDY实现,简单翻译了部分SPDY v3的文档,空闲时整理以后也许会放到网上吧:-)。

SPDY协议在每个请求上增加了id,这样就可以在一个TCP连接上并发的发起多个请求,充分利用IO多路复用的能力,提高了网络连接的利用率,这是HTTP1.1和Apache JK协议做不到的。

Firefly下个版本会支持SPDY协议以及HTTPS,然后开发一个SPDY proxy作为前端负载均衡和cache。另外Firefly的JSON解析器的功能还需要加强一下,会增加循环引用的序列化以及流式接口支持。

在开源过程中有哪些感悟?怎么看待国内的开源环境? Top

开发开源软件主要是靠兴趣来维持,开发Firefly之后对Web开发技术栈以及各种网络协议的理解会更深刻,自己实现一个框架和去看懂别人的代码还是有些区别的。

国内的开源环境比国外还是差得远吧,毕竟在国内的生活压力非常大,注重技术的公司也不是很多。根据马斯洛需求理论,只要大家的生活都过得好了,相信会有更多的人投入到开源软件的开发行列。
  • 大小: 123.8 KB


评论 共 87 条
87 楼 Caelebs 2016-04-26 17:38
          
86 楼 psfu 2013-11-27 15:36
独木不成林,一个人盖不起高楼,
85 楼 Test_Wu 2013-06-01 17:58
楼主的精神值得敬佩和学习!

但是个人觉得,我们中国的框架开发者之间目前缺乏一个合作关系的体现,个人精力有限,开发精而专的框架,也许会比大而广好一些,单独个人别妄想与IT巨头比拼,除非你有很强的实力.比如开发Ioc的专门开发Ioc,开发持久化专门开发持久化框架,做Web框架的就单独只做Web框架,做框架集成的就只做框架集成,可以以现有流行优秀框架为参照物,浓缩其精华后可以模仿模式实现代码,如果功能点上没有创新,那怕造的与对方一样也行.看看中国的3G手机跟进式的发展还不错哦.

SSH之所以成功,一个重要的原因,是就它们之间互相协助,互相依赖,构造了一个应用生态链,并达到共赢局面,这点需要中国开元者的认识到:单打独斗难以成功.

要是有某个地方清点一下我们中国现有的框架有哪些,并以应用领域加以区分一下就好了.

自己不造轮子,永远只能用别人的轮子!轮子的制作体现了我们中国程序员自强不息和敢于奉献一面,值得尊敬和佩服,支持轮子的制作者!




84 楼 zidafone 2013-05-24 08:07
zidafone 写道
请问这是什么意思:

Caused by: com.firefly.utils.log.LogException: create dir /data/logs failure


看了下源码,原来是创建文件夹失败。汗。
已解决。
83 楼 zidafone 2013-05-23 02:01
请问这是什么意思:

Caused by: com.firefly.utils.log.LogException: create dir /data/logs failure
82 楼 Test_Wu 2013-05-17 20:52
不简单哦,一个Web框架中还包含一个Ioc容器,这个Ioc容器可以独立使用吗?

要是能支持数据库操作,感觉会更好. 怎么感觉搞Ioc容器比较多啊,刚才在坛子里看到一个自称是Java菜鸟的,也弄一个Ioc容器,代码上感觉有点那么象Spring了.

81 楼 amar0088 2013-04-08 08:23
重复造轮子
80 楼 cnrainbing 2013-03-27 22:18
老兄你这个能连接数据库吗?能连接redis或者mecache吗?
79 楼 book007 2013-03-25 14:33
spring很好,但是我非常支持国内有更多的人搞开源框架研发,就像中国的汽车工业一样,不注重研发,没有过硬的引擎技术,永远也不过是个OEM工厂罢了!
那些说不要重复发明轮子的人,真的是体现了中国IT界的悲唉!
没有自己的深层次的技术,不过是永远的码穷罢了!!!
78 楼 book007 2013-03-25 14:22
git了原码还是很不错的!就是原码的文件没有使用UTF-8格式,中文备注变成乱码了。
不影响使用,但还是建议作者用UTF-8保存源码的好。
77 楼 allbin1983 2013-03-01 22:36
allbin1983 写道
flashing 写道
Pontifex 写道
lonelybug 写道
事实胜于雄辩,楼下的两位用户的问题根本就没人管啊! 这作者就是耍嘴皮子还比较“专业”。



所以说,敢于使用这些野鸡框架的人,乃大勇或无畏者

几年前iteye猛上首页的什么simpleframework,现在早死了,就是隔三差五的发个垃圾邮件给我说你多少天没登录论坛了,烦死了。


躺下中枪, simpleframework 4.0 都发布了,国内的开源大环境不太好,愤青也多,开源本身就是一个兴趣,包容心真不行,如果你自己的高见发表一下,也算对开源的支持。
http://www.simpleframework.net/blog/v/172543.html

http://www.iteye.com/news/27259写在 SimpleFramework 4 发布之际,为您而写。
76 楼 allbin1983 2013-03-01 13:38
flashing 写道
Pontifex 写道
lonelybug 写道
事实胜于雄辩,楼下的两位用户的问题根本就没人管啊! 这作者就是耍嘴皮子还比较“专业”。



所以说,敢于使用这些野鸡框架的人,乃大勇或无畏者

几年前iteye猛上首页的什么simpleframework,现在早死了,就是隔三差五的发个垃圾邮件给我说你多少天没登录论坛了,烦死了。


躺下中枪, simpleframework 4.0 都发布了,国内的开源大环境不太好,愤青也多,开源本身就是一个兴趣,包容心真不行,如果你自己的高见发表一下,也算对开源的支持。
http://www.simpleframework.net/blog/v/172543.html
75 楼 flashing 2013-02-12 09:20
Pontifex 写道
lonelybug 写道
事实胜于雄辩,楼下的两位用户的问题根本就没人管啊! 这作者就是耍嘴皮子还比较“专业”。



所以说,敢于使用这些野鸡框架的人,乃大勇或无畏者

几年前iteye猛上首页的什么simpleframework,现在早死了,就是隔三差五的发个垃圾邮件给我说你多少天没登录论坛了,烦死了。
74 楼 Pontifex 2013-02-12 00:03
lonelybug 写道
事实胜于雄辩,楼下的两位用户的问题根本就没人管啊! 这作者就是耍嘴皮子还比较“专业”。



所以说,敢于使用这些野鸡框架的人,乃大勇或无畏者
73 楼 lonelybug 2013-02-10 22:09
事实胜于雄辩,楼下的两位用户的问题根本就没人管啊! 这作者就是耍嘴皮子还比较“专业”。

72 楼 海滩拾贝壳的小孩 2013-02-07 16:15
下载后报异常没法用啊?
71 楼 jj356302304 2013-01-25 10:45
jj356302304 写道
我发现两个地方不太好用,我的是resin服务器
1.按照说明部署项目的时候,服务器无法启动,老是报错,后台查看源码发现需要在classpath下添加firefly-log.properties,才可以启动。那说明中为什么不说清楚呢?

2.servlet拦截的后缀比较死板,在web.xml中不能配置/*.do这样结尾的地址,必须要在Actiopn中的@RequestMapping(value = "/hello.do")这样配置才可以在链接中带.do的后缀。

另外:补充一点:视图怎么也无法跳过去
我的配置
<mvc view-path="/WEB-INF/page" view-encoding="UTF-8" />
Action的代码
@RequestMapping(value = "/hello.action")
    public View index(HttpServletRequest request) {
        System.out.println("------exec--------");
        return new JspView("/index.jsp");
    }
action执行了,但是视图怎么也无法跳转
我分别
在WEB-INF下建了一个index.jsp
在WEB-INF/page下建了一个index.jsp
在WebContent下也建了一个index.jsp
但是结果是一个页面都显示不出来
70 楼 jj356302304 2013-01-25 10:32
我发现两个地方不太好用,我的是resin服务器
1.按照说明部署项目的时候,服务器无法启动,老是报错,后台查看源码发现需要在classpath下添加firefly-log.properties,才可以启动。那说明中为什么不说清楚呢?

2.servlet拦截的后缀比较死板,在web.xml中不能配置/*.do这样结尾的地址,必须要在Actiopn中的@RequestMapping(value = "/hello.do")这样配置才可以在链接中带.do的后缀。
69 楼 youarestupid 2013-01-14 12:40
youarestupid 写道
[size=large]不管怎么说,总是要支持国产开源项目的,开源是一种莫大的贡献,自己设计过平台或者框架的人都明白,一套框架凝聚了作者的很多汗水和希望,能把自己的劳动成果开源,在中国是一种非常大的勇气。

所以,我们一定要支持国产开源项目。

至于国产框架能不能在实际项目中使用,我的观点是:
1、如果这个框架确实比同类框架要优秀;
2、如果你的公司团队有技术扎实的技术人员,有重视技术而非赶工赚钱的领导层。

如果你的公司符合以上两点,那么可以放心地使用优秀的国产开源项目。

很多人担心使用国产开源框架,后期技术跟进没有保障,这主要是因为:
1、国产开源项目普遍不能持久地维护和演进,经常是作者一个人热乎劲头最多一年,然后整个项目就沉寂了,没人管了,有bug没人理会,有新功能需求没人去搭理,完全成了一个墓碑式项目,项目网址如果是独立域名,通常都渐渐地域名过期打不开了;如果使用的github.com或者google code这样的代码托管服务,通常是几年过去了,项目首页连一个字也没人去改动;
2、国产开源项目,普通是参与者程度不高,这体现在,没人参与开发,通常只有一两个项目维护者,然后渐渐的项目维护者自己也不去关心这个墓碑式项目了;
没人提交bug,没人提交功能需求,没人反馈项目实施中遇到的问题,没人参与讨论,甚至一两年都没人去访问一下它的项目主页。


这就是国产开源框架的现实。

所以,对于能不能在实际项目中使用国产开源框架,我认为最主要的一个前提是:
你的公司是否准备好了自己去维护所采用的整个国产开源框架,也就是:
你的公司是否有一批技术扎实的技术人员?
你的公司领导层是否真正重视技术?

如果你的公司满足了上面两个条件,你的公司有决心自己维护整套国产开源框架,那么你的公司可以考虑使用确实优秀的国产开源框架。[/size]
68 楼 youarestupid 2013-01-14 12:30
不管怎么说,总是要支持国产开源项目的,开源是一种莫大的贡献,自己设计过平台或者框架的人都明白,一套框架凝聚了作者的很多汗水和希望,能把自己的劳动成功开源,在中国是一种非常大的勇气。

所以,我们一定要支持国产开源项目。

至于国产框架能不能在实际项目中使用,我的观点是:
1、如果这个框架确实比同类框架要优秀;
2、如果你的公司团队有技术扎实的技术人员,有重视技术而非赶工赚钱的领导层。

如果你的公司符合以上两点,那么可以放心地使用优秀的国产开源项目。
67 楼 ray_linn 2013-01-14 09:56
august_000 写道
精神可嘉,那些使用开源框架的群体,别忘了。如果没有没有楼主这样的优秀的人,怎么可能有我们免费开源的ssh?如果有100个像楼主一样开源精神的人,Firefly能飞不起来。所以,我鄙视那些只懂得用嘴巴的人,拿出点open的精神,打造属于国人自己的Open Source Framework.支持楼主,加油...



野鸡open source也能变凤凰?
66 楼 ray_linn 2013-01-14 09:56
mengfei86 写道
zhuchao_ko 写道
顺便说下我自己也有一套框架,叫 SuperFrame ,不过我没开源的精神 我只要自己能用的好就行 ~

哎,中国大部分人应该都这样吧。还是思想的区别,或者是差距


我也有一套,叫 One Piece,,啊哦,错了,那是昨天看的海贼王。。
65 楼 mengfei86 2013-01-14 09:27
zhuchao_ko 写道
顺便说下我自己也有一套框架,叫 SuperFrame ,不过我没开源的精神 我只要自己能用的好就行 ~

哎,中国大部分人应该都这样吧。还是思想的区别,或者是差距
64 楼 hypercube1024 2013-01-14 09:12
winwa 写道
如果在非Controller中需要获取request或response,如何得到HttpServletRequest对象,前提是不能用参数的形式传入?

你可以自己设置到ThreadLocal里面
63 楼 winwa 2013-01-14 08:26
如果在非Controller中需要获取request或response,如何得到HttpServletRequest对象,前提是不能用参数的形式传入?
62 楼 Pontifex 2013-01-13 10:31
野鸡框架太多了,有人敢用?
61 楼 august_000 2013-01-12 22:44
精神可嘉,那些使用开源框架的群体,别忘了。如果没有没有楼主这样的优秀的人,怎么可能有我们免费开源的ssh?如果有100个像楼主一样开源精神的人,Firefly能飞不起来。所以,我鄙视那些只懂得用嘴巴的人,拿出点open的精神,打造属于国人自己的Open Source Framework.支持楼主,加油...
60 楼 zhuchao_ko 2013-01-12 16:49
顺便说下我自己也有一套框架,叫 SuperFrame ,不过我没开源的精神 我只要自己能用的好就行 ~
59 楼 zhuchao_ko 2013-01-12 16:47
iteye对愿意把自己的开发框架贡献出来的人是最支持的,诸位看看之前对楼主这样的框架要多要少,最后有谁在用?用的人不多吧。楼主你的东西始终还是你的东西,看看SPRING做的比你做的优秀的实在太多了,真的。你的这套框架也只有自己觉得好,要让天朝大众开发人员接受。。实在有点那个,不过对楼主的开源精神还是值得赞赏的,希望你的框架能为你所服务的公司带来效益。那些黑你的话我是不会说的。
58 楼 theoffspring 2013-01-12 15:05
为什么今天还有人用ssh,直接用sh就可以了,struts2可以废掉了,它的功能spring mvc全都有,而且更简单,用spring mvc真的很爽。

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

Global site tag (gtag.js) - Google Analytics