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

  

  

原文地址:https://www.cnblogs.com/sfwtoms/p/3935988.html