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