Skip to content
forked from Qihoo360/evpp

A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols.

License

Notifications You must be signed in to change notification settings

guyannanfei25/evpp

 
 

Repository files navigation

evpp

evpp is a modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols. evpp provides a TCP Server to support multi-threaded nonblocking event-drive server and also a HTTP, UDP Server to support http and udp prococol.

Features

  1. Modern C++11 interface
  2. Modern functional/bind style callback instead of C-style function pointer.
  3. A nonblocking multi-threaded TCP server
  4. A nonblocking TCP client
  5. A nonblocking multi-threaded HTTP server based on the buildin http server of libevent
  6. A nonblocking HTTP client
  7. A nonblocking multi-threaded UDP server
  8. EventLoop/Thread Pool/Timer

And also provides some libraries base on evpp:

  1. evmc a nonblocking async C++ memcached (or membase cluster) client library.
  2. evnsq a nonblocking async C++ NSQ client library. See evnsq readme for details.

TODO:

  1. A async redis client
  2. Add zipkin tracing support
  3. Add examples : asio chat room

Getting Started

Please see Quick Start

Examples

A echo TCP server

#include <evpp/exp.h>
#include <evpp/tcp_server.h>
#include <evpp/tcp_conn.h>
#include <evpp/buffer.h>

void OnMessage(const evpp::TCPConnPtr& conn,
               evpp::Buffer* msg,
               evpp::Timestamp ts) {
    std::string s = msg->NextAllString();
    LOG_INFO << "Received a message [" << s << "]";
    conn->Send(s);
    if (s == "quit" || s == "exit") {
        conn->Close();
    }
}

int main(int argc, char* argv[]) {
    std::string addr = std::string("0.0.0.0:9999");
    evpp::EventLoop loop;
    evpp::TCPServer server(&loop, addr, "TCPEcho", 0);
    server.SetMessageCallback(&OnMessage);
    server.Init();
    server.Start();
    loop.Run();
    return 0;
}

A echo HTTP server

#include <evpp/exp.h>
#include <evpp/http/http_server.h>

void RequestHandler(evpp::EventLoop* loop,
                    const evpp::http::ContextPtr& ctx,
                    const evpp::http::HTTPSendResponseCallback& cb) {
    cb(ctx->body.ToString());
}

int main(int argc, char* argv[]) {
    std::vector<int> ports = {9009, 23456, 23457};
    int thread_num = 2;
    evpp::http::Server server(thread_num);
    server.RegisterHandler("/echo", &RequestHandler);
    server.Init(ports);
    server.Start();
    while (!server.IsStopped()) {
        usleep(1);
    }
    return 0;
}

A echo UDP server

#include <evpp/exp.h>
#include <evpp/udp/udp_server.h>
#include <evpp/udp/udp_message.h>

void DefaultHandler(evpp::EventLoop* loop, evpp::udp::MessagePtr& msg) {
    evpp::udp::SendMessage(msg);
}

int main(int argc, char* argv[]) {
    std::vector<int> ports = {1053, 5353};
    evpp::udp::Server server;
    server.SetMessageHandler(&DefaultHandler);
    server.Init(ports);
    server.Start();

    while (!server.IsStopped()) {
        usleep(1);
    }
    return 0;
}

More examples

Please see the source code in examples.

Thanks

Thanks for the support of Qihoo360.

Thanks for libevent, glog, gtest projects.

evpp is highly inspired by muduo. Thanks for the great work of Chen Shuo

About

A modern C++ network library for developing high performance network services in TCP/UDP/HTTP protocols.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 91.3%
  • CMake 2.8%
  • Makefile 2.5%
  • C 1.8%
  • Go 1.2%
  • Shell 0.4%