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开发笔记二的更多相关文章
- Django开发笔记二
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...
- SDL开发笔记(二):音频基础介绍、使用SDL播放音频
若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...
- EasyUI 开发笔记(二)
接上篇 :EasyUI 开发笔记(一) (http://www.cnblogs.com/yiayi/p/3485258.html) 这期就简单介绍下, easyui 的 list 展示, 在easy ...
- RBL开发笔记一
从这个系列开始 陆续记录整个RBL开发的过程 废话不多说 直入主题 10:54:53 2014-08-25 今天开发任务: RBL.h 的框架搭建出来 包括RBLServer RB ...
- RBL开发笔记三
2014-08-26 20:06:24 今天就是在开发这个EPOLL来处理网络事件 封装较为健壮的EPOLL模型来处理基本的网络IO 1) 超时这个主题先没有弄 在开发EPOLL包括select/po ...
- Vue-cli开发笔记二----------接口调用、配置全局变量
我做的一个项目,本身是没用任何框架,纯手写的前端及数据交互,项目已经完结.最近学Vue,于是借用这个项目,改装成vue项目. (一)接口问题:使用axios的调用方法,proxyTable解决开发环境 ...
- openwrt开发笔记二:树莓派刷openwrt
前言及准备 本笔记适用于第一次给树莓派刷openwrt系统的玩家,对刷机过程及注意事项进行了记录,刷机之后对openwrt进行一些简单配置. 使用openwrt源码制作固件需要花费一点时间. 平台环境 ...
- Django开发笔记六
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.登录功能完善 登录成功应该是重定向到首页,而不是转发 ...
- Django开发笔记五
Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.页面继承 定义base.html: <!DOC ...
随机推荐
- 逻辑操作符---Lua: and,or,not 对比 C++:&&,||,!
lua中有三个逻辑操作符:and,or,not(逻辑与,逻辑或,逻辑非),同样c++也有类似的三个逻辑操作符:&&,||,!(逻辑与,逻辑或,逻辑非).他们的运算对象就是真和假.lua ...
- 探究chrome下的开发工具的各功能
F12 一.网页寻找js事件的位置,或者某一个次究竟在哪个相关的文件中可以全局搜索: ①控制台右上角的:(Customize and control DevTools)三个点点开,---->Se ...
- Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用
#!/usr/bin/Python指定用什么解释器运行脚本以及解释器所在的位置 # -*- coding: utf-8 -*-用来指定文件编码为utf-8的 估计有不少人注意过一些python脚本开头 ...
- js高级程序设计(七)BOM
window 对象 BOM 的核心对象是window,它表示浏览器的一个实例.在浏览器中,window 对象有双重角色,它既是通过JavaScript 访问浏览器窗口的一个接口,又是ECMAScrip ...
- js高级程序设计(七)函数表达式
定义函数的方式有两种:一种是函数声明,另一种就是函数表达式.函数声明的语法是这样的. function functionName(arg0, arg1, arg2) { //函数体 } Firefox ...
- jqury ajax 标准
参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 ...
- sql server 自增长id 允许插入显示值
--允许插入显示插入主键id的值SET IDENTITY_INSERT [T0002_SType] ON 执行insert插入语句------------------ --关闭 插入显示值SET ID ...
- 各种边缘检测算子特点比较(canny)
canny 最好.但是容易把噪点误判为边界.sobel prewitt log 效果差不多.prewitt比sobel 去噪效果好.roberts马马虎虎.适合什么图片那得看图片的噪点情况,一般can ...
- ssh下:系统初始化实现ServletContextListener接口时,获取spring中数据层对象无效的问题
想要实现的功能:SSH环境下,数据层都交由Spring管理:在服务启动时,将数据库中的一些数据加载到ServletContext中缓存起来. 系统初始化类需要实现两个接口: ServletContex ...
- docker初学笔记
什么是docker 不准确的说,docker是一种轻量级的虚拟机,它把可执行文件和运行环境打包成一个image,放在容器里运行,但是启动速度比虚拟机快很多,资源消耗小.这种技术主要是为了解决部署环境的 ...