<commit_before>handy[![Build Status](https://travis-ci.org/yedf/handy.png)](https://travis-ci.org/yedf/handy)
====
[English](https://github.com/yedf/handy/blob/master/README-en.md)
##简洁易用的C++11网络库--参考了陈硕的[muduo](http://github.com/chenshuo/muduo/)

###多平台支持

*   Linux: ubuntu14 64bit g++4.8.1 上测试通过

*   MacOSX: LLVM version 6.1.0 上测试通过

###支持优雅退出

优雅退出可以让程序员更好的定义自己程序的退出行为

能够更好的借助valrind等工具检查内存泄露。

###高性能

*   linux上使用epoll

*   MacOSX上使用kqueue

[性能测试报告](http://www.oschina.net/p/c11-handy)

###简洁

10行代码能够编写一个完整的服务器

###代码示例--echo-server

```c
#include <handy/handy.h>

using namespace std;
using namespace handy;


int main(int argc, const char* argv[]) {
    EventBase bases; //事件分发器
    Signal::signal(SIGINT, [&]{ bases.exit(); }); //注册Ctrl+C的信号处理器--退出事件分发循环
    TcpServer echo(&bases); //创建服务器
    int r = echo.bind("", 99); //绑定端口
    exitif(r, "bind failed %d %s", errno, strerror(errno));
    echo.onConnRead([](const TcpConnPtr& con) {
        con->send(con->getInput()); // echo 读取的数据
    });
    bases.loop(); //进入事件分发循环
}
```

###支持半同步半异步处理

异步管理网络I/O，同步处理请求，可以简化服务器处理逻辑的编写，示例参见examples/hsha.cc

###openssl支持

异步连接管理，支持openssl连接

###protobuf支持

使用protobuf的消息encode/decode示例在protobuf下

###安装与使用

    make && make install

###目录结构

*   handy--------handy库  
*   examples----示例  
*   ssl------------openssl相关的代码与示例  
*   protobuf-----handy使用protobuf的示例  
*   test-----------handy相关的测试  

###[使用文档](https://github.com/yedf/handy/blob/master/doc.md)

license
====
Use of this source code is governed by a BSD-style
license that can be found in the License file.

email
====
<EMAIL>
<commit_msg>README updated<commit_after>handy[![Build Status](https://travis-ci.org/yedf/handy.png)](https://travis-ci.org/yedf/handy)
====
[English](https://github.com/yedf/handy/blob/master/README-en.md)
##简洁易用的C++11网络库--参考了陈硕的[muduo](http://github.com/chenshuo/muduo/)

###多平台支持

*   Linux: ubuntu14 64bit g++4.8.1 上测试通过

*   MacOSX: LLVM version 6.1.0 上测试通过

###支持优雅退出

优雅退出可以让程序员更好的定义自己程序的退出行为

能够更好的借助valrind等工具检查内存泄露。

###高性能

*   linux上使用epoll

*   MacOSX上使用kqueue

[性能测试报告](http://www.oschina.net/p/c11-handy)

###简洁

10行代码能够编写一个完整的服务器

###代码示例--echo-server

```c
#include <handy/handy.h>

using namespace std;
using namespace handy;


int main(int argc, const char* argv[]) {
    EventBase bases; //事件分发器
    Signal::signal(SIGINT, [&]{ bases.exit(); }); //注册Ctrl+C的信号处理器--退出事件分发循环
    TcpServer echo(&bases); //创建服务器
    int r = echo.bind("", 99); //绑定端口
    exitif(r, "bind failed %d %s", errno, strerror(errno));
    echo.onConnRead([](const TcpConnPtr& con) {
        con->send(con->getInput()); // echo 读取的数据
    });
    bases.loop(); //进入事件分发循环
}
```

###支持半同步半异步处理

异步管理网络I/O，同步处理请求，可以简化服务器处理逻辑的编写，示例参见examples/hsha.cc

###openssl支持

异步连接管理，支持openssl连接

###protobuf支持

使用protobuf的消息encode/decode示例在protobuf下

###安装与使用

    make && make install

###目录结构

*   handy--------handy库  
*   examples----示例  
*   ssl------------openssl相关的代码与示例  
*   protobuf-----handy使用protobuf的示例  
*   test-----------handy相关的测试  

###[使用文档](https://github.com/yedf/handy/blob/master/doc.md)

license
====
Use of this source code is governed by a BSD-style
license that can be found in the License file.

email
====
<EMAIL>

qq群
====
189076978
{'fraction_non_alphanumeric': 0.19009287925696594, 'fraction_numerical': 0.01393188854489164, 'mean_word_length': 3.5315568022440393, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 11, 'https://': 8, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1387196', 'n_tokens_mistral': 1626, 'n_tokens_neox': 1709, 'n_words': 219}