zoukankan      html  css  js  c++  java
  • 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
    

      

      

  • 相关阅读:
    今日总结
    今日总结
    今日总结
    本周总结
    今日总结
    今日总结
    今日总结
    今日总结
    今日总结
    vue3函数setUp和reactive函数详细讲解
  • 原文地址:https://www.cnblogs.com/sfwtoms/p/3935988.html
Copyright © 2011-2022 走看看