首页 > 代码库 > RBL开发笔记二

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

 

  

 

 

 

  

RBL开发笔记二