zoukankan      html  css  js  c++  java
  • 组件实现【技术分享】发布本人所属 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 项目主页:http://portal-basic.googlecode.com

        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 项目主页:http://ldcsaa.googlecode.com

        


         二、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 项目主页:http://ldcsaa.googlecode.com

        ----------------------------------------------------------------

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

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

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

        

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

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

        

    1. 简单污浊:不依附任何程序库或框架
    2. 使用接口简单,不需庞杂的配置或设置任务
    3. 提供 CStaticLogger 和 CDynamicLogger 包装类用于静态或动态加载以及操作日记组件,用户无 需存眷加载细节
    4. 程序如果要记录多个日记文件只要为每一个日记文件创立响应的 CStaticLogger 或 CDynamicLogger 对象
    5. 只要调用 Log()/Debug()/Trace()/Info()/Warn()/Error()/Fatal() 等方法记录日记
    6. 日记记录方法支撑可变参数
    7. 日记输出格式:<时间> <线程ID> <日记级别> <日记内容>

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

        

    1. 支撑多线程同时发送写日记请求
    2. 使用单独线程在后台写日记,不影响任务线程的畸形执行
    3. 采取批处置方式批量记录日记

        VC-Logger 项目主页:http://ldcsaa.googlecode.com

    文章结束给大家分享下程序员的一些笑话语录: 问答
    Q:你是怎么区分一个内向的程序员和一个外向的程序员的? A:外向的程序员会看着你的鞋和你说话时。
    Q:为什么程序员不能区分万圣节和圣诞节? A:这是因为 Oct 31 == Dec 25!(八进制的 31==十进制的 25)

  • 相关阅读:
    【POJ1743】Musical Theme(后缀数组,二分)
    【BZOJ1031】字符加密Cipher(后缀数组)
    gui线程
    线程同步
    多线程
    java记事本
    gui界面2048小游戏
    IO流+数据库课后习题
    数据库(批处理, 事务,CachedRawSetImpl类
    java(try块语句变量,和匿名类变量生存时间
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3091813.html
Copyright © 2011-2022 走看看