/WebServer

C++ Web Server

Primary LanguageC++MIT LicenseMIT

WebServer

A C++ Web Server with the technical points below:

  • Reactor pattern
  • Epoll
  • Thread Pool

Architecture

graph TD

subgraph Server
    subgraph main_reactor
        MainPoller[Poller]
    end

subgraph acceptor
    AcceptSocket
end

acceptor --accept_channel--- main_reactor

subgraph sub_reactor
    subgraph sub_reactor_0
        SubPoller0[Poller]
    end

    subgraph sub_reactor_1
        SubPoller1[Poller]
    end
end

subgraph Connections
    subgraph connection_0
        ConnectionSocket0
    end

    subgraph connection_1
        ConnectionSocket1
    end

    subgraph connection_2
        ConnectionSocket2
    end
end

connection_0 --channel_0--- sub_reactor_0
connection_1 --channel_1--- sub_reactor_1
connection_2 --channel_2--- sub_reactor_1

ThreadPool

sub_reactor_0 --loop--- ThreadPool
sub_reactor_1 --loop--- ThreadPool

end

Build

mkdir build && cd build
cmake ..
make

make format     # optional
make cpplint    # optional
make clang-tidy # optional

Run

Echo Service

Run echo server

# at build/
./bin/echo_server

Run echo client

# at build/

./bin/echo_client
# or
./bin/echo_clients

Chat service

Run chat server

# at build/
./bin/chat_server

Run chat client

# at build/
./bin/chat_client