RBL开发笔记二

      17:13:55 2014-08-25

  有以下几个点:

       第一 :怎么在预处理阶段能够做到识别某个宏是否给定义了  这里就定义了一个SystemConfig.h 专门做这个事情  当然是需要makefile来配合的  

  http://blog.csdn.net/chaoqunz/article/details/6033663  这篇博文已经提到相应的方法  在makefile里加一个-D 参数  这相当于就是Makefile一个补充参数吧。

  

  第2: 因为我的计划写这个RBL的时候  可以通过配置文件写成 3种底层模式:

  a 单进程单线程服务模式

  b 单进程多线程服务模式【正常锁】

  c 单进程多线程服务模式 【rw_lock锁】

  对于第1 没有啥问题

  对于第2  :

需要开发以下几个东西 1)怎么类似的可配置的安全的部分  就好似Linux内核关于是否是SMP_处理模式

2) 单线程服务模式: 采用类似redis服务模式来搞定 这点还是比较命令  epoll+单进程 这种不会发挥多核优势 但拥有不会超过的CPU 100%这种

3) 多线程服务模式:多线程+epoll 这种模式  是epoll线程监听到IO事件立即放在任务队列中 而其他的线程做相应的操作处理  这点会考虑到锁的种类 是用spin_lcok还是mutex_lock 所以需要考虑细致。【编程技术上 目前来看 这点是最难的】

………… 还有若干点 在后面的开发中慢慢写出来

22:01:27 2014-08-25

 今天进度有点慢  简单封装了一个Socket.h EventLoop.h 但是我现在在想怎么更好的把EventLoop和Epoll封装起来  另外需要封装IO读写操作。【**】

  明天开发任务: 1   把EPOLL嵌入到EventLoop这个类中  并且写出相应的测试程序

          2   完成相应的操作 bloomfilter 读和写   并且进行单元测试

      

 

#ifndef _SOCKET_

#define _SOCKET_



#include <sys/types.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <string>

#include <arpa/inet.h>

//TCP服务

class Socket

{

public:

	Socket(int ServerPort)

	{

		soketfd=socket(AF_INET,SOCK_STREAM,0);

		seraddr.sin_family=AF_INET;

		seraddr.sin_addr.s_addr=htonl(INADDR_ANY);

		seraddr.sin_port=htons(ServerPort);

	}

	int Getfd()

	{

		return soketfd;

	}

	struct sockaddr_in* GetSeraddr()

	{

		return &seraddr;

	}

private:

	int soketfd;

	struct sockaddr_in seraddr;

};



//客户端建立

class ClientConnection

{

public:

	ClientConnection(int port,const std::string& ip_):sock(port),ip(ip_)

	{

		inet_pton(AF_INET,ip.c_str(),&sock.GetSeraddr()->sin_addr);

	}

	void Connect(void)

	{

		connect(sock.Getfd(),(struct sockaddr*)sock.GetSeraddr(),sizeof(struct sockaddr));

	}

private:

	Socket sock;

	std::string ip;

};

//服务器端建立

class ServerConnection

{

public:

	ServerConnection(int port):sock(port)

	{

		bind(sock.Getfd(),(struct sockaddr*)sock.GetSeraddr(),sizeof(struct sockaddr_in));

		//监听队列暂时随便定义一个值 8

		listen(sock.Getfd(),8);

	}

	Socket&  GetSock()

	{

			return sock;

	}

private:

	Socket sock;

};



#endif

 

  

 

 

 

  

你可能感兴趣的:(开发)