<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[chenrang1850的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/chenrang1850</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; chenrang1850]]></copyright><item><title><![CDATA[redis 字符串的管理的一点理解]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791313</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791313</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:50:00 +0800</pubDate><description><![CDATA[redis字符串可以实现通过地址偏移找到所在结构体的首地址，struct sdshdr *sh = (void *)(s - (sizeof(struct sdshdr))) 
 
也就是通过buf地址可以找到sdshdr的地址，这个我一直不理解，写了代码测试下 
 
地址一次间隔4，结构体总...]]></description><category></category></item><item><title><![CDATA[对于redis底层框架的理解(一)]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791310</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791310</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:50:00 +0800</pubDate><description><![CDATA[近期学习了redis底层框架，好多东西之前都没听说过，算是大开眼界了。 
 
先梳理下redis正常的通讯流程吧 
 
首先服务器启动都有主函数main，这个main函数就在redis.c里 
首先是initserverconfig()，在这里初始化了redisserver基本的配置信息，...]]></description><category></category></item><item><title><![CDATA[IO多路复用之epoll(一)讲解]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791309</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791309</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:49:00 +0800</pubDate><description><![CDATA[网络通信中socket有自己的内核发送缓冲区和内核接受缓冲区，好比是一个水池， 
当用户发送数据的时候会从用户缓冲区拷贝到socket的内核发送缓冲区，然后从 
socket发送缓冲区发出去, 当用户要读取数据时，就是从socket内核读缓冲区读 
到用户缓冲区。所以TCP中recv, ...]]></description><category></category></item><item><title><![CDATA[IO多路复用之epoll（二）]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791308</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791308</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:49:00 +0800</pubDate><description><![CDATA[前一篇介绍了epoll的LT模式，LT模式注意epollout事件在数据全部写成功后需要取消关注， 
或者更改为EPOLLIN。 
而这次epoll的ET模式，要注意的是在读和写的过程中要在循环中写完或者读完所有数据， 
确保不要丢掉一些数据。 
因为epoll ET模式只在两种边缘更改的时候...]]></description><category></category></item><item><title><![CDATA[基于epoll封装的事件回调miniserver]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791307</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791307</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:48:00 +0800</pubDate><description><![CDATA[epoll技术前两节已经阐述过了，目前主要做一下封装，很多epoll的服务器都是采用事件回调方式处理， 
其实并没有什么复杂的，我慢慢给大家阐述下原理。 
在networking.h和networking.cpp里，这两个文件主要实现了一些文件读写功能的回调函数 
。 
 
acceptCa...]]></description><category></category></item><item><title><![CDATA[弱点针对训练（函数指针）]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791306</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791306</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:47:00 +0800</pubDate><description><![CDATA[想着把每一个基础的知识点搞清，趁着早晨凉快就先写一些总结 
 
函数指针，基本结构是 函数返回类型（* 函数指针名字）（函数参数1，函数参数2，...）； 
这种指针用于指向一个函数的地址，可以通过函数指针回调同类型的不同函数，实现类似于事件回调机制的功能。 
 
先写一个简单的测试程序 ...]]></description><category></category></item><item><title><![CDATA[简单循环服务器]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791305</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791305</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:47:00 +0800</pubDate><description><![CDATA[客户端部分： 
比较简单 
创建socket 然后connect服务器，进行通讯 
 
发送数据，并且接收数据，然后关闭 
 
 
服务器部分： 
服务器要做的是创建socket，初始化地址信息，并且绑定socket，然后进行监听 
 
 
然互就是在循环里处理客户端连接上来的请求，并且接...]]></description><category></category></item><item><title><![CDATA[简单的并发服务器（多个线程各自accept）]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791304</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791304</guid><author>chenrang1850</author><pubDate>Sat, 13 Aug 2016 10:46:00 +0800</pubDate><description><![CDATA[基于之前讲述的简单循环服务器，做一个多个线程各自accept的服务器demo 
由于多个线程各自accept，容易造成数据错误，需要在accept前后枷锁 
先看下客户端 
客户端创建socket，初始化服务器地址信息，然后进行连接 
 
 
连接成功后发送信息给服务器，并且接受服务器回传的...]]></description><category></category></item><item><title><![CDATA[对于redis框架的理解（二）]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791303</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791303</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:35:00 +0800</pubDate><description><![CDATA[之前梳理过redis main函数主体流程 
大体是initServerConfig() -&gt;loadServerConfig() 
-&gt;daemonize() -&gt;initServer() -&gt;aeSetBeforeSleepProc() 
-&gt;aeM...]]></description><category></category></item><item><title><![CDATA[对于redis框架的理解(三)]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791302</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791302</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:34:00 +0800</pubDate><description><![CDATA[上一篇讲完了initServer的大体流程，其中aeCreateEventLoop（）,这个函数 
没有详细说明，我们在这一篇里讲述Ae.h和Ae.c, 这里面的api阐述了如何创建 
eventLoop和添加文件读写事件等等。 
ae.h中的解释 
//文件读写事件回调函数
typedef ...]]></description><category></category></item><item><title><![CDATA[对于redis框架的理解（四）]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791301</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791301</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:34:00 +0800</pubDate><description><![CDATA[上一篇讲述了eventloop的结构和创建，添加文件事件删除文件事件，派发等等。 
而eventloop主要就是调用不同网络模型完成事件监听和派发的。 
这一篇主要讲述epoll网络模型，redis是如何封装和调用的 
下面是epoll_event的结构 
/*
    epoll_even...]]></description><category></category></item><item><title><![CDATA[libiop网络库数据结构和基础知识]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791300</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791300</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:33:00 +0800</pubDate><description><![CDATA[最近朋友推荐，学习了libiop这个网络库，作者封装的很全面，代码很简洁 
适合初学者学习基于事件驱动的网络io 
先看看iop_def.h, 这里面定义了常用的数据结构 
 
tag_iop_base_t 主要用于管理所有事件，每个事件是一个iop_t, 
maxio表示最大的文件描述符...]]></description><category></category></item><item><title><![CDATA[libiop通讯流程和api讲解]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791299</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791299</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:32:00 +0800</pubDate><description><![CDATA[上一篇讲到了libiop基本结构,这次根据libiop提供的test跟踪下消息和运行流程 
void echo_server_test()
{
    int keepalive_timeout = 60;
    iop_base_t *base = iop_base_new(10240);...]]></description><category></category></item><item><title><![CDATA[makefile学习笔记]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791298</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791298</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:32:00 +0800</pubDate><description><![CDATA[之前都是手动编译的，最近也学了下makefile相关的知识， 
文件结构是这样的在server文件夹里有eventloop.h, 
eventloop.cpp, networking.h, networking.cpp, 
api_epoll.h, api_epoll.cpp,以及文件夹mai...]]></description><category></category></item><item><title><![CDATA[stringstream 使用方法]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791297</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791297</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:31:00 +0800</pubDate><description><![CDATA[C++ 有stringstream这个工具可以方便的进行数据类型的转换 
使用时包含 
#include &lt;sstream.h&gt; 
using namespace std; 
 
当需要将一个整形的数转换为字符串 
stringstream mystream;

int a = ...]]></description><category></category></item><item><title><![CDATA[select网络模型知识总结]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791296</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791296</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:30:00 +0800</pubDate><description><![CDATA[select模型支持IO多路复用，select函数如下 
int select (
 IN int nfds,                           //windows下无意义，linux有意义
 IN OUT fd_set* readfds,      //检查可读性
 IN ...]]></description><category></category></item><item><title><![CDATA[对于redis底层框架的理解（五）]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791295</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791295</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:30:00 +0800</pubDate><description><![CDATA[之前总结了redis的通讯流程，基本框架，epoll的封装等等，这次介绍下 
redis对于select模型的封装 
//select 模型
typedef struct aeApiState {
    //读文件描述符集合，写文件描述符集合
    fd_set rfds, wfds;
 ...]]></description><category></category></item><item><title><![CDATA[epoll的一些细节和注意事项]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791294</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791294</guid><author>chenrang1850</author><pubDate>Thu, 11 Aug 2016 10:29:00 +0800</pubDate><description><![CDATA[epoll_event结构 
struct epoll_event
{
  uint32_t events;  /* Epoll events */
  epoll_data_t data;    /* User data variable */
} __attribute__ ((__pac...]]></description><category></category></item><item><title><![CDATA[Linux环境编译动态库和静态库总结]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791293</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791293</guid><author>chenrang1850</author><pubDate>Wed, 10 Aug 2016 11:39:00 +0800</pubDate><description><![CDATA[对Linux环境动态库和静态库的一些基础知识做一些总结， 
首先总结静态库的编译步骤。 
1 先基于.cpp或者.c文件生成对应的.o文件 
2将几个.o文件 使用ar -cr命令 生成libname.a文件 
libname.a 为静态库， name 为静态库的名字， 
可以根据模块功能命名...]]></description><category></category></item><item><title><![CDATA[libevent学习笔记（参考libevent深度剖析）]]></title><link>https://blog.youkuaiyun.com/chenrang1850/article/details/100791292</link><guid>https://blog.youkuaiyun.com/chenrang1850/article/details/100791292</guid><author>chenrang1850</author><pubDate>Wed, 10 Aug 2016 11:38:00 +0800</pubDate><description><![CDATA[最近自学libevent事件驱动库，参考的资料为libevent2.2版本以及张亮提供的《Libevent源码深度剖析》， 
参考资料：http://blog.youkuaiyun.com/sparkliang/article/details/4957667 
libevent好处之类的就不赘述了，li...]]></description><category></category></item></channel></rss>