Skip to content

Commit

Permalink
First commit, a demo.
Browse files Browse the repository at this point in the history
  • Loading branch information
jiangeZh committed Feb 3, 2016
1 parent 0eacb5f commit 4a4bbcd
Show file tree
Hide file tree
Showing 14 changed files with 725 additions and 0 deletions.
24 changes: 24 additions & 0 deletions Makefile
@@ -0,0 +1,24 @@
THIRD_LIBS=-levent
LIBS=-ldl
CFLAGS=-I./include

master:src/master.o src/worker.o src/listener.o src/connection.o src/main.o
g++ -g -o $@ src/master.o src/worker.o src/listener.o src/connection.o src/main.o $(THIRD_LIBS) $(LIBS)

src/master.o:src/master.cpp include/master.h
g++ -g -o $@ -c $< $(CFLAGS)

src/worker.o:src/worker.cpp include/worker.h include/util.h
g++ -g -o $@ -c $< $(CFLAGS)

src/listener.o:src/listener.cpp include/listener.h include/util.h
g++ -g -o $@ -c $< $(CFLAGS)

src/connection.o:src/connection.cpp include/connection.h include/util.h
g++ -g -o $@ -c $< $(CFLAGS)

src/main.o:src/main.cpp include/master.h
g++ -g -o $@ -c $< $(CFLAGS)

clean:
rm -f src/*.o master
1 change: 1 addition & 0 deletions README.md
@@ -0,0 +1 @@
High performance HTTP Server.It is designed to study Lighttpd(so I call it "slighttpd").
51 changes: 51 additions & 0 deletions include/connection.h
@@ -0,0 +1,51 @@
/*************************************************************************
> File Name: connection.h
> Author: Jiange
> Mail: jiangezh@qq.com
> Created Time: 2016年01月27日 星期三 20时10分35秒
************************************************************************/

#ifndef _CONNECTION_H
#define _CONNECTION_H

#include <string>
#include <queue>

#include "event2/event.h"
#include "event2/util.h"

#include "util.h"

class Worker;

class Connection
{
public:
Connection();
~Connection();

bool InitConnection(Worker *worker);

void WantRead();
void NotWantRead();
void WantWrite();
void NotWantWrite();

static void ConEventCallback(evutil_socket_t fd, short event, void *arg);

Worker *con_worker;

evutil_socket_t con_sockfd;
struct sockaddr_in con_addr;
struct event *con_event; //这里用两个event,一个注册读,一个注册写会效率高点
//struct event *write_event;
//struct event *read_event;

std::string con_inbuf;
std::string con_intmp;
std::string con_outbuf;

static void FreeConnection(Connection *con);
};

#endif
40 changes: 40 additions & 0 deletions include/listener.h
@@ -0,0 +1,40 @@
/*************************************************************************
> File Name: listener.h
> Author: Jiange
> Mail: jiangezh@qq.com
> Created Time: 2016年01月27日 星期三 19时46分34秒
************************************************************************/

#ifndef _LISTENER_H
#define _LISTENER_H

#include <string>

#include "event2/event.h"
#include "event2/util.h"

#include "util.h"

class Worker;

class Listener
{
public:
Listener(const std::string &ip, unsigned short port);
~Listener();

bool InitListener(Worker *worker);
void AddListenEvent();

static void ListenEventCallback(evutil_socket_t fd, short event, void *arg);

Worker *listen_worker;
evutil_socket_t listen_sockfd;
struct sockaddr_in listen_addr;
struct event *listen_event;
uint64_t cnt_connection;
};


#endif

44 changes: 44 additions & 0 deletions include/master.h
@@ -0,0 +1,44 @@
/*************************************************************************
> File Name: server.h
> Author: Jiange
> Mail: jiangezh@qq.com
> Created Time: 2016年01月27日 星期三 19时33分00秒
************************************************************************/

#ifndef _MASTER_H
#define _MASTER_H

#include "worker.h"

#include <string>

#include "event2/event.h"
#include "event2/util.h"

class Master
{
public:

Master(const std::string &ip, unsigned short port);
~Master();

bool StartMaster();

static void MasterExitSignal(evutil_socket_t signo, short event, void *arg);

static void MasterChldSignal(evutil_socket_t signo, short event, void *arg);

Worker worker;

struct event_base *m_base;
struct event *m_exit_event;
struct event *m_chld_event;

int nums_of_child;

private:

};


#endif
19 changes: 19 additions & 0 deletions include/util.h
@@ -0,0 +1,19 @@
/*************************************************************************
> File Name: util.h
> Author: Jiange
> Mail: jiangezh@qq.com
> Created Time: 2016年01月28日 星期四 10时39分22秒
************************************************************************/

#ifndef _UTIL_H
#define _UTIL_H

#include <signal.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdint.h>

#endif
50 changes: 50 additions & 0 deletions include/worker.h
@@ -0,0 +1,50 @@
/*************************************************************************
> File Name: worker.h
> Author: Jiange
> Mail: jiangezh@qq.com
> Created Time: 2016年01月27日 星期三 20时10分35秒
************************************************************************/

#ifndef _WORKER_H
#define _WORKER_H

#include "listener.h"

#include <string>
#include <map>

#include "event2/event.h"
#include "event2/util.h"

#include "util.h"

class Master;
class Connection;

class Worker
{
public:

typedef std::map<evutil_socket_t, Connection*> ConnectionMap;

Worker(const std::string &ip, unsigned short port);
~Worker();

void Run();

static void WorkerExitSignal(evutil_socket_t signo, short event, void *arg);

Master *master;
Listener listener;
ConnectionMap con_map;

struct event_base *w_base;
struct event *w_exit_event;

std::string s_inbuf;
std::string s_intmp;
std::string s_outbuf;

};

#endif

0 comments on commit 4a4bbcd

Please sign in to comment.