Skip to content
/ handy Public
forked from yedf2/handy

🔥简洁易用的C++11网络库 / 支持单机千万并发连接 / a simple C++11 network server framework

License

Notifications You must be signed in to change notification settings

qrGitHub/handy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
yedongfu
Apr 18, 2019
482dd46 · Apr 18, 2019
Sep 2, 2018
Feb 26, 2019
Sep 2, 2018
Feb 26, 2019
Sep 2, 2018
Feb 28, 2019
Feb 26, 2019
Sep 2, 2018
Mar 14, 2018
Sep 2, 2018
Apr 18, 2019
Aug 3, 2014
Aug 2, 2014
Nov 22, 2015
Apr 18, 2019
Jan 9, 2019
May 14, 2016
Jun 7, 2017
Jun 6, 2017

Repository files navigation

handyBuild Status

English

简洁易用的C++11网络库

多平台支持

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

  • MacOSX: LLVM version 6.1.0 上测试通过

  • MacOSX: 支持CLion IDE

支持优雅退出

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

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

高性能

简洁

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

代码示例--echo-server

#include <handy/handy.h>
using namespace handy;

int main(int argc, const char* argv[]) {
    EventBase base;
    Signal::signal(SIGINT, [&]{ base.exit(); });
    TcpServerPtr svr = TcpServer::startServer(&base, "", 2099);
    exitif(svr == NULL, "start tcp server failed");
    svr->onConnRead([](const TcpConnPtr& con) {
        con->send(con->getInput());
    });
    base.loop();
}

支持半同步半异步处理

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

openssl支持

异步连接管理,支持openssl连接,如果实现安装了openssl,能够找到<openssl/ssl.h>,项目会自动下载handy-ssl 由于openssl的开源协议与此不兼容,所以项目文件单独放在handy-ssl

protobuf支持

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

udp支持

支持udp,udp的客户端采用connect方式使用,类似tcp

安装与使用

make && make install

目录结构

  • handy--------handy库
  • 10m----------进行千万并发连接测试所使用的程序
  • examples----示例
  • raw-examples--原生api使用示例,包括了epoll,epoll ET模式,kqueue示例
  • ssl------------openssl相关的代码与示例
  • protobuf-----handy使用protobuf的示例
  • test-----------handy相关的测试

raw-examples

使用os提供的api如epoll,kqueue编写并发应用程序

  • epoll.cc,演示了epoll的通常用法,使用epoll的LT模式
  • epoll-et.cc,演示了epoll的ET模式,与LT模式非常像,区别主要体现在不需要手动开关EPOLLOUT事件

examples

使用handy的示例

  • echo.cc 简单的回显服务
  • timer.cc 使用定时器来管理定时任务
  • idle-close.cc 关闭一个空闲的连接
  • reconnect.cc 设置连接关闭后自动重连
  • safe-close.cc 在其他线程中安全操作连接
  • chat.cc 简单的聊天应用,用户使用telnet登陆后,系统分配一个用户id,用户可以发送消息给某个用户,也可以发送消息给所有用户
  • codec-cli.cc 发送消息给服务器,使用的消息格式为mBdT开始,紧接着4字节的长度,然后是消息内容
  • codec-svr.cc 见上
  • hsha.cc 半同步半异步示例,用户可以把IO交给handy框架进行处理,自己同步处理用户请求
  • http-hello.cc 一个简单的http服务器程序
  • stat.cc 一个简单的状态服务器示例,一个内嵌的http服务器,方便外部的工具查看应用程序的状态
  • write-on-empty.cc 这个例子演示了需要写出大量数据,例如1G文件这种情景中的使用技巧
  • daemon.cc 程序已以daemon方式启动,从conf文件中获取日志相关的配置,并初始化日志参数
  • udp-cli.cc udp的客户端
  • udp-svr.cc udp服务器
  • udp-hsha.cc udp的半同步半异步服务器

license

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

email

[email protected]

qq群

  • 群2:775245483
  • 群1: 189076978

如果您觉得此项目不错,或者对您有帮助,请赏颗星吧!

About

🔥简洁易用的C++11网络库 / 支持单机千万并发连接 / a simple C++11 network server framework

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 82.2%
  • Python 10.9%
  • Shell 3.2%
  • CMake 2.2%
  • Makefile 1.4%
  • C 0.1%