阅读更多

15顶
1踩

企业架构

原创新闻 我的一些实用的 Java / C++ 开源项目整理

2013-05-22 10:59 by 资深记者 guaishou 评论(10) 有19636人浏览
本文整理了我之前做的一些Java/C++开源项目,这些项目在我的博客中分别介绍过,为了方便阅读和使用,我进行了整理。

Java项目:

  1. Java 全能高效 MVC & REST 开发框架 Portal-Basic
  2. Java 日志切割清理工具 Log-Cutter
C++项目:

  1. 通用高性能 Windows Socket 组件 HP-Socket
  2. Windows C++ 应用程序通用日志组件 VC-Logger
一、Java项目

1、Java 全能高效 MVC & REST 开发框架 Portal-Basic

Portal-Basic 是一套功能完备的高性能 Full-Stack Web 应用开发框架,内置可扩展的 MVC Web 基础架构和 DAO 数据库访问组件(内部已提供了 Hibernate、MyBatis 与 JDBC DAO 组件),集成了 Action 拦截、Form / Dao / Spring Bean 装配、国际化、文件上传下载和页面静态化等基础 Web 应用组件,提供高效灵活的纯 Jsp/Servlet API 编程模型,可完美整合 Spring,支持 Action Convention,能快速开发传统风格和 RESTful 风格应用程序,文档和示例完善,非常容易学习。

Portal-Basic 项目主页:https://code.google.com/p/portal-basic/

Portal-Basic在设计之初就充分注重功能、性能与使用体验。Portal-Basic主要特点:

  • 功能全面:内置稳定高效的MVC基础架构和DAO框架,支持Action拦截、Form Bean / Dao Bean / Spring Bean装配和声明式事务,提供国际化、文件上传下载、缓存和页面静态化等常用Web组件,能满足绝大部分Web应用的需要。
  • 高度扩展:Portal-Basic通过的plug-in机制可以灵活扩展,Portal-Basic发布包中自带的portal-basic-ext-rest和portal-basic-ext-spring均以插件的形式提供,用户可根据需要加载或卸载这些插件。应用程序开发者也可以根据实际需要编写自定义插件来扩展Portal-Basic。
  • 强大的整合能力:Portal-Basic是一个Full-Stack框架,同时也是一个开放式框架,可以以非常简单的方式整合第三方组件。本开发手册会详细阐述如何在Portal-Basic中整合FreeMarker、Velocity、UrlRewrite、EHCache-Web、Spring、Hibernate和MyBaits等常用框架和组件。
  • 高性能:性能要求是Portal-Basic的硬性指标,从每个模块的设计到每行代码的实现都力求简洁高效。另外,Portal-Basic并没有对JSP/Servet API进行过多封装,开发者仍然使用JSP/Servet API开发应用程序,没有过多的迂回,性能得到保证。
  • 优秀的使用体验:Portal-Basic的设计目标之一是提供良好的开发体验,尽量减少应用程序开发者的工作,API的设计力求简单、完整、明确。同时,Portal-Basic为应用开发提供了大量Util工具,用来处理应用程序开发过程中通常会遇到的一般性问题,进一步减少应用程序开发者的工作负担。
  • 平缓的学习曲线:平缓的学习曲线:学习使用Portal-Basic只需掌握一定的Core Java与JSP/Servlet知识,本开发手册会循序渐进阐述每个知识点,每个知识点都会结合完整的示例进行讲述,知识点之间前后呼应,确保学习者在学习时温故知新,融会贯通。
  • 完善的技术支持:除了提供完善的开发手册和示例代码以外,还提供博客和Q~Q~群用于解答使用Portal-Basic过程中碰到的所有问题。

Portal-Basic 总体架构:



Portal-Basic 应用程序依赖关系:



2、Java 日志切割清理工具 Log-Cutter

Log-Cutter 是一个简单实用的日志切割清理工具。对于服务器的日常维护来说,日志清理是非常重要的事情,如果残留日志过多则严重浪费磁盘空间同时影响服务的性能。如果用手工方式进行清理,会花费太多时间,并且很多时候难以满足实际要求。例如:如何在每个星期六凌晨3点把超过 2G 大的日志文件进行切割,保留最新的 100M 日志记录? 网上没有发现能满足本座要求的日志切割工具,因此花了一些闲暇时间自己写了一个。由于要在多个平台上使用,为了方便采用 Java 实现。本工具命名为 Log-Cutter,主要有以下特点:

  • 支持 Linux、Mac 和 Windows 等所有常见操作系统平台
  • 支持命令行交互式运行
  • 支持后台非交互式运行(Linux/MAC 下使用 daemon 进程实现,Windows 用系统 Service 实现)
  • 支持两种日志清理方式(删除日志文件或切割日志文件)
  • 支持对 GB18030、UTF-8、UTF-16LE、UTF-16BE 等常用日志文件类型进行切割(不会发生切掉半个字符的情况)
  • 高度可配置(程序执行周期、要删除的日志文件过期时间、要切割的日志文件阀值和保留大小等均可配置

Log-Cutter 项目主页:https://code.google.com/p/ldcsaa/

二、C++项目

1、通用高性能 Windows Socket 组件 HP-Socket

HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)和一个性能测试示例(Test Echo-PFM),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。

通用性:

  • 通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;
  • 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。
可用性:

可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。

高性能:

作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:

  • 客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。
  • 服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。
伸缩性:

可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。

HP-Socket 项目主页:https://code.google.com/p/ldcsaa/

2、Windows C++ 应用程序通用日志组件 VC-Logger

VC-Logger 是一个简单易用的 C++ 程序通用日子组件。设计时着重考虑三个方面:

功能:

本日志组件的目的是满足大多数应用程序记录日志的需求 —— 把日志输出到文件或发送到应用程序中,并不提供一些复杂但不常用的功能。本日志组件的功能包括:

  • 把日志信息输出到指定文件
  • 每日生成一个日志文件
  • 对于 GUI 程序,可以把日志信息发送到指定窗口
  • 对于Console应用程序,可以把日志信息发往标准输出 (std::cout)
  • 支持 MBCS / UNICODE,Console / GUI 程序
  • 支持动态加载和静态加载日志组件 DLL
  • 支持 DEBUG/TRACE/INFO/WARN/ERROR/FATAL 等多个日志级别
可用性:

本日志组件着重考虑了可用性,尽量让使用者用起来觉得简便、舒心:

  • 简单纯净:不依赖任何程序库或框架
  • 使用接口简单,不需复杂的配置或设置工作
  • 提供 CStaticLogger 和 CDynamicLogger 包装类用于静态或动态加载以及操作日志组件,用户无 需关注加载细节
  • 程序如果要记录多个日志文件只需为每个日志文件创建相应的 CStaticLogger 或 CDynamicLogger 对象
  • 只需调用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法记录日志
  • 日志记录方法支持可变参数
  • 日志输出格式:<时间> <线程ID> <日志级别> <日志内容>
性能:

性能是组件是否值得使用的硬指标,本组件从设计到编码的过程都尽量考虑到性能优化:

  • 支持多线程同时发送写日志请求
  • 使用单独线程在后台写日志,不影响工作线程的正常执行
  • 采用批处理方式批量记录日志

VC-Logger 项目主页:https://code.google.com/p/ldcsaa/
15
1
评论 共 10 条 请登录后发表评论
10 楼 guaishou 2013-05-24 10:06
guaishou 写道
wsc0918 写道
優秀,看似web應用面的基本功能都包上了,版大有測過效能比嗎?mvc的反應速度和struts2, spring mvc比如何呢?

测试过与纯jsp/servlet model2 比较,结果非常接近,相差不超过7%。struts2就不用测了,出了名的慢,性能还不及struts1,springMVC应该好于struts2,不过没实测。

补充说明,性能提升主要归因于一下几方面:
1、框架实现代码尽量少使用Java 反射机制。
2、缓存:包括配置选项缓存、拦截规则缓存、注解规则缓存等。
3、代码级优化
9 楼 guaishou 2013-05-24 09:43
wsc0918 写道
優秀,看似web應用面的基本功能都包上了,版大有測過效能比嗎?mvc的反應速度和struts2, spring mvc比如何呢?

测试过与纯jsp/servlet model2 比较,结果非常接近,相差不超过7%。struts2就不用测了,出了名的慢,性能还不及struts1,springMVC应该好于struts2,不过没实测。
8 楼 wsc0918 2013-05-24 09:13
優秀,看似web應用面的基本功能都包上了,版大有測過效能比嗎?mvc的反應速度和struts2, spring mvc比如何呢?
7 楼 wangguo 2013-05-23 15:52
guaishou 写道
PS:有读者反映项目链接打不开,请尝试使用以下两个链接:
https://code.google.com/p/portal-basic/
https://code.google.com/p/ldcsaa/

文中链接已更新了
6 楼 guaishou 2013-05-23 15:33
PS:有读者反映项目链接打不开,请尝试使用以下两个链接:
https://code.google.com/p/portal-basic/
https://code.google.com/p/ldcsaa/
5 楼 guaishou 2013-05-23 15:30
dbvqht 写道
链接打不开,Portal-Basic感觉功能有些杂,到底定位在什么地方呢?作为轻量级的框架来说如果不能有更强针对性的话,还是不太敢使用。倒是不妨认真学习一下。另外想问一下该框架MVC部分的优点体现的什么地方呢?

用这个链接可能可以打开:https://code.google.com/p/ldcsaa/。
优点上面都简单提了,包括容易学习、使用简单、可扩展、高性能(可以检查源码)。另外,Portal-Basic已用在多个商业和电政项目。
4 楼 dbvqht 2013-05-23 15:17
链接打不开,Portal-Basic感觉功能有些杂,到底定位在什么地方呢?作为轻量级的框架来说如果不能有更强针对性的话,还是不太敢使用。倒是不妨认真学习一下。另外想问一下该框架MVC部分的优点体现的什么地方呢?
3 楼 guaishou 2013-05-23 11:40
ivan_2000 写道
Portal-Basic 名字看上去和portal、portlet等有关,结果还是一个开发框架看不出什么特点,MVC & REST  spring都能干。

由于历史原因名字看起来的确有点怪异。至于特点,上面的介绍中已简单说明了,详细的内容可以参考开发手册。Spring的确可以做几乎任何事情,但那些更轻量级的框架也有自己的优势,如简洁的结构与代码使用户更容易学习和使用、让高级用户更容易研究框架技术内部原理,另外整体性能通常比较高。
2 楼 ivan_2000 2013-05-23 11:03
Portal-Basic 名字看上去和portal、portlet等有关,结果还是一个开发框架看不出什么特点,MVC & REST  spring都能干。
1 楼 guaishou 2013-05-22 15:23
Anyone 说几句吧 ~~~ Pls

发表评论

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

相关推荐

  • java开发oa办公系统源码-github-started:个人started项目整理

    java开发oa办公系统源码真棒明星 我的 GitHub 星星的精选列表! 生成者 内容 自动热键 —— - 通过添加额外的键盘快捷键和对多个壁纸的支持来增强 Windows 10 多桌面功能的应用程序。 批处理文件 - Windows 新酷音非...

  • 自然人机交互到底“自然”在哪儿?| 硬创公开课(附视频)

    [转] http://www.leiphone.com/news/201701/tfL1l0y3heIGWVre.html 导语:雷锋网邀请了小小牛创意科技创始人,自然人机交互技术国际专家曹翔,来讲解自然人机交互到底“自然”在哪儿? 无论是开创智能手机时代的 iPhone,还是如今很热门的 VR/AR 和人工智能,再到苹果新 Macboo

  • 一些实用的 Java / C++ 开源项目整理

    本文整理了一些JAVA/C++开源项目,这些项目在我的博客中分别介绍过,为了方便阅读和使用,我进行了整理。  Java项目:  Java 全能高效 MVC & REST 开发框架 Portal-BasicJava 日志切割清理工具 Log-Cutter...

  • C++开源项目

    个人觉得比较经典的C++ 开源项目,整理如下:   1 、log4cplus log4cplus 是C++ 编写的开源的日志系统, 功能非常全面。C++ 版的log4j 网址:http://log4cplus.sourceforge.net/   2 、...

  • 一些好的开源C++代码分享

    1、leveldb ——google出品的键/值对(Key/Value Pair)嵌入式数据库 2、Boost.Asio ——服务器框架 3、tinyxml——xml解析器 ...7、SQLite——开源的嵌入式关系数据库 8、Webbench——是一个在...

  • 面向2022届毕业生-自动驾驶/SLAM/DL/C++ 岗位收集整理

    收集整理 Created by leijobs876@gmail.com 目标方向: C/C++ 开发 Andorid 开发 深度学习部署 自动驾驶感知与定位 ROS机器人开发 文章目录收集整理**目标方向:**方向完全一致:总体结果1、秋招进展框图1、...

  • C/C++程序员的黄金方向-音视频开发

    说起 C++,很多人的第一反应就是:复杂、难学,事实也的确如此。但不可否认,C++ 在近 30 年里经久不衰,并且现在学习 C++ 的人还在逐年增长。究其原因,是 C++ 有着独特优势。C...

  • 400+条实用C/C++框架、库、工具整理 ,你能想到的都在这里了

    正文:&nbsp;...值得学习17个C/C++ 超经典开源项目,面试必备 目录 库和框架 标准库 框架 人工智能 异步事件循环 音频 生态学 压缩 并发性 容器 密码学 数据库 调试 游戏引擎 图形用户界面 图形 图像处

  • 给程序员介绍一些C++开源库

    C++开源库,欢迎补充。 C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应 用。当Java横行天下之后,MS又突然发力,搞...

  • C++经典开源项目

    个人觉得比较经典的C++ 开源项目,整理如下: 1 、log4cplus log4cplus 是C++ 编写的开源的日志系统, 功能非常全面。C++ 版的log4j 网址:http://log4cplus.sourceforge.net/ 2 、Glog Google Glog 是一个...

  • 2022年比若依更香的开源项目

    深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长...因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

  • C++经典开源项目

    个人觉得比较经典的C++ 开源项目,整理如下:   1 、log4cplus log4cplus 是C++ 编写的开源的日志系统, 功能非常全面。C++ 版的log4j 网址:http://log4cplus.sourceforge.net/   2 、...

  • 一些非常好的开源c++代码

    1、leveldb ——google出品的键/值对(Key/Value Pair)嵌入式数据库 2、Boost.Asio ——服务器框架 3、tinyxml——xml解析器 ...5、cJSON ——json解析器 ...7、SQLite——开源的嵌入式关系数据库 8、Webbenc

  • 适合C/C++的集成开发环境

    “工欲善其事,必先利其器”,选择合适的集成开发环境(IDE)往往能做到事半功倍的作用,下面给您介绍一下适合C/C++语言的集成开发环境。 适合C/C++常用IDE工具 序号 名称 适合操作系统...

  • 一个程序员的Java和C++学习之路(整理)

    转载自:http://blog.csdn.net/ajian005/article/details/8003655经典编程书籍大全: http://blog.jobbole.com/106093/ ...一直有这么个想法,列一下我个人认为在学习和使用Java过程中可以推荐一读的书

  • 有哪些比较流行的 C、C++和Java 的入门级项目?

    学习编程语言除了看书看视频,还需要找一些适合自己的开源项目,本文给大家安排了C、C++、JAVA相关的开源项目,不废话直接开车!

  • 自然语言处理讲义

      1.综述.1.1. 绪论.1.1.1. 背景,目标.1.1.1.1. 研究自然语言的动力1. 语言是思维的裁体,是人际交流的重要工具。在人类历史上以语言文字形式记载和流传的知识占到知识总量的80%以上。就计算机的应用而言,据统计用于数学计算的仅占10%,用于过程控制的不到5%,其余85%左右都是用于语言文字的信息处理。在这样的社会需求下,自然语言理解作为语言信息处理技术的一个高层次的重要方向,

  • 人工智能传奇——关于AI起源与发展的故事

    人工智能传奇——关于AI起源与发展的故事 一、图林与人工智能   介绍人工智能, 不能不从图林说起。英国著名学者 阿兰·图林(A. Turing) 不仅以“纸上下棋机”率先探讨了下棋与机器智能的联系,他还是举世公认的“人工智能之父”。   图林的一生充满着未解之谜,他就象上天派往下界的神祗 ,匆匆而来,又匆匆而去,为人间留下了智慧,留下了深邃的思想,后人必须为之思索几十年甚至几百年。   许多文献

  • 人工智能的认识论问题

    人工智能的认识论问题董军 潘云鹤近50年来,人工智能走的是一条曲折发展的道路。1990年代初,研究者深感人工智能理论及技术的局限性,从而从不同角度和层次进行反思。同时,人工智能有待于人类对人脑工作机理的深入了解,需要神经生理学、神经解剖学给出更加详细的信息和证据。  人工智能交融了诸多学科,与哲学更是密不可分。尽管事实上,新近的哲学进展基本上没给科学带来任何冲击,并且哲学的讨论对象往往是悬而未决的

  • 图灵机与计算问题

    图灵机与计算问题张江(email: jakezj@163.com)自从20世纪30年代以来,图灵机、计算这些重要的概念在科学的天空中就一直闪烁着无限的光彩。尤其是近年来量子计算机、生物计算机、DNA计算等领域的创新工作引起了世人的广泛关注。我们不禁问这样的问题,国外究竟为什么能发明出这些各式各样的计算机呢?这些意味着什么呢?其实这一切的源头都来源于计算理论。国内在介绍计算理论方面的教材虽然有不少,

Global site tag (gtag.js) - Google Analytics