- 博客(32)
- 资源 (16)
- 收藏
- 关注
原创 Redis源码学习之【命令协议格式】
介绍本来这篇要介绍Redis的命令解析的,但是要想对Redis的命令解析有更直观的了解,必须先了解Redis的命令协议格式。源码暂无(或者是是在network.c中吧)分析Requests* CR LF$ CR LF CR LF...$ CR LF CR LFRedis最新支持的二进制安全的请求通用格式如上所示。具体的实例有:*3$3
2013-03-18 14:09:17
4332
原创 Redis源码学习之【网络通信框架】
介绍前面两篇文章主要介绍了Redis对epoll和socket 的封装,这篇就开始详细介绍Redis网络通信的具体实现。简单说来Redis的网络通信主要实现了服务器监听客户端连接并处理的主要流程和实现。源码networking.c分析网络通信流程说明Redis网络通信主要原理和一般的异步网络编程框架类似,都是使用服务器端的socket进行监听到来的连接然
2013-03-18 10:29:34
3876
原创 Redis源码学习之【Tcp Socket封装】
介绍Redis对linux socket的封装,虽然在该封装中也含有对unix socket的封装,但是普遍来说使用的tcp socket。和上一篇的epoll的封装类似,都是通过调用底层的socket的函数完成一些列的方便的函数调用封装。源码anet.h anet.c分析主要包含以下几个封装函数(这里仅介绍关于Tcp socket的封装函数)anetTcpconnect:
2013-03-18 08:48:36
4744
原创 Redis源码学习之【epoll封装】
介绍在上一篇博文中说到了在Redis 的事件处理中使用到了底层的linux epoll,根据Redis的实现可以使用其他的多路通信层,但是在一般的linux服务器中使用的最多的还是epoll所以这里主要介绍一下epoll。Redis并没有直接的使用linux的epoll而是对其进行了一个简单的封装。源码ae_epoll.c分析在原有的linux epoll的基础上进行封装,主要
2013-03-17 15:20:51
3196
原创 Redis源码学习之【事件机制】
介绍Redis实现了自己的一套和libevent类似的事件驱动机制,主要用于处理时间事件和文件事件。文件事件底层主要是指网络IO事件的处理,底层使用的可能是select,epoll,或者是kqueue。Redis使用自己实现的AE而不是像memcache使用的libevent使得其性能更好,因为libevent为了其通用性增加了很多扩展功能显然会降低使用它的性能。源码ae.h ae.c
2013-03-17 14:00:13
5214
原创 Redis源码学习之【哈希字典】
介绍Redis的哈希字典通过key值来找对应的value。需要注意的是Redis的字典是如何进行rehash的。源码dict.h dict.c数据结构如上图所示,哈希字典用dict结构体表示,其中含有两个哈希表,主要用于进行rehash操作。同时哈希表使用量表的方式解决冲突。具体的数据结构如下:/* * 哈希表节点 */typedef struct dic
2013-03-16 16:34:39
2847
原创 Redis源码学习之【内存分配】
介绍Redis现在的版本可以支持使用tcmalloc或者是jemalloc或是apple的malloc,或者是Redis自己的zmalloc。zmalloc对内存的分配管理是线程安全的,而且分配的内存必须要求是以sizeof(long)对其的。源码zmalloc.h zmalloc.c分析宏变量说明:PREFIX_SIZE:在实际分配的内存之前用于记录分配的内存的大
2013-03-16 15:25:42
1594
原创 Redis源码学习之【动态字符串】
介绍由于在标准C中没有字符串这一类型,因而Redis实现了一个自己的字符串sds。源文件sds.h sds.c分析数据结构// sds 类型typedef char *sds;// sdshdr 结构struct sdshdr { // buf 已占用长度 int len; // buf 剩余可用长度 int free;
2013-03-16 14:39:29
1242
原创 Redis源码学习之【链表】
介绍Redis自己实现了一个含有迭代器的双向链表。基本功能就是通用的双向链表,源码实现还是值得阅读以下的。源文件adlist.h adlist.c分析这里主要介绍其主要的数据结构其他的链表相关的操作有兴趣的话可以自己去看源码,其中的细节tricky还是挺多的。/* Node, List, and Iterator are the only data structures
2013-03-16 10:11:10
1230
原创 Redis源码学习之【前言】
前言之前言本来上年的时候要参与到一个关于Redis中的项目中的,但是由于临时的决定参与到了其他的项目。心中一直对Redis可以说是念念不忘,印象最深的是当初一开始听到Redis的时候,说它是数据库中的AK-47。而作者SalvatoreSanfilippo在实现Redis的时候完全按照标准C进行编写,一切需要的数据结构和算法都是自己实现。编码风格是将编出来的代码像诗歌一样优美。Redi
2013-03-16 10:03:07
1716
原创 Python 哲学
以下关于Python的几个菜鸟看法是最近在详细学习Python中的一些感受。实用往往会胜过美观习惯了c c++ java等语言的人在看到Python编写出来的代码的时候,往往会感觉到Python不如C那样宛如诗歌一样优美,但是Python却是以实用为主的。例如Python中的三重引号的使用。尽可能自动化,方便开发者Python在不断地发展演进中一直在提供更多的内建方法属性帮助开发人
2013-03-14 21:09:53
1763
原创 linux 网络编程【五】 非阻塞通信epoll
Epoll引入Epoll在linux 2.6内核中引入,替代了以前的select/poll模型,能够充分支持linux下的大规模并发网络程序。Epoll和其他linux下并发网络程序对比PPC典型的Apache模型,Process Per Connection,为每一个新的连接创建一个进程进行相关的处理。TPCThread Per Connection,为每一个新的连接创建
2013-02-23 08:24:53
5273
原创 linux 网络编程【四】 非阻塞通信poll
函数原型#include int poll(struct pollfd fds[], nfds_t nfds, int timeout);typedef struct pollfd { int fd; /* 需要被检测或选择的文件描述符*/ short events;
2013-02-22 17:44:49
3546
1
原创 linux 网络编程【三】 非阻塞通信select
函数声明select函数int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);说明:int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1。fd_set *readfds是指向fd_set结构的
2013-02-22 16:09:27
2756
原创 linux 网络编程【二】 基本阻塞通信
基本流程服务器端声明句柄fd和网络地址sockaddr_in赋值sockaddr_in为服务器的端口和INADDR_ANY表明监听任意连接调用socket函数创建一个socket并赋值句柄为fd调用bind函数将句柄fd和网络地址sockaddr_in进行绑定调用listen函数开始监听客户端的连接调用accept函数获得连接的客户端调用send recv函数进行数据发
2013-02-22 15:39:38
1032
原创 linux 网络编程【一】 socket地址
linux socket中三种地址sockaddr普通的socket地址typedef unsigned short sa_family_t;struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char s
2013-02-22 15:20:24
976
原创 mfc中的双缓冲机制
简单来说其基本的概念:专门设定一个暂时存储图形信息的内存,将所有暂时的画图内容先放到暂存CDC中,然后再放入完所有的以后调用.具体实现步骤1.首先是定义一个暂时的设备上下文CDC h_BufDC; // 双缓冲层CBitmap memBitmap;
2011-08-17 16:10:30
1998
原创 利用QT制作自定义控件
<br />1. 首先利用QT crearot 创建一个自定义控件项目,在创建的过程中要指明创建的类和创建的类的实例名称。这样在以后使用的过程中可以直接使用。此处还得指明icon图标文件为了在designer中显示。<br />2. 在创建的项目中开始编写相应的处理函数,肯能主要的是重载onpaint函数,这样就可以设计出想要的自定义widget的内容。<br />3. 选择好版本进行编译。<br />4. 在编译后的运行目录下,用控制台命令运
2011-04-29 16:17:00
5956
1
原创 利用qt制作帮助文档
<br />利用qt制作帮助文档<br /> 创建文档和自定义的qt assistant<br />1. 创建文档即是一些html文件,这里可以使用qt提供的工具像是qdoc 和Doxygen生成帮助的html文档。<br />2. 组织文档结构用于qt assistant<br />a) 创建qt help project(.qhp)<br /> i. 定义命名空间命名空间必须是唯一的
2011-04-29 16:15:00
8196
原创 corba 的c++实现(vs2005)
<br />配置corba和vs2005结合的环境<br />一、下载OmniORB<br />http://sourceforge.net/projects/omniorb/files/<br />VS2005下载omniORB-4.1.4-x86_win32-vs8.zip,VS2008下载omniORB-4.1.4-x86_win32-vs9.zip<br />下载后解压到任意目录即可,本人解压后为D:/DevAssist/omniORB-4.1.4<br />二、配置环境变量<br />计算机右键单
2011-02-25 13:52:00
2345
原创 QT 模拟鼠标事件
<br />模拟鼠标按键<br />和模拟键盘按键类似,也是通过发送相应的事件来实现的,安装相应的事件监听器,具体发送事件:<br />QPoint pos;<br />pos.setX(88);<br />pos.setY(58);<br />QMouseEvent *mEvnPress;<br />QMouseEvent *mEvnRelease;<br />mEvnPress = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton
2010-12-27 08:55:00
11500
原创 QPlainTextEdit 理解
<br />QPlainTextEdit 是QT中一种高级的用于支持纯文本的显示和编辑控件。它被优化用来专门处理大文件和给予快速的用户反应。<br />QPlainTextEdit 采用的大多数的技术和QTextEdit差不多,但是被优化用来处理纯文本文件。<br />QPlainTextEdit 以paragraphs 和 characters为基本的处理单元。主要是用来做显示的,这尤其体现在当我们需要打开一个文件并显示其内容的时候,大多使用该类。再具体的信息可以参见qt assistant
2010-12-08 13:45:00
5421
原创 qt隐藏鼠标指针
对于整个程序来说的话QApplication::setOverrideCursor(Qt::BlankCursor);或是QWSServer::setCursorVisible(FALSE);对单个控件来说的话:lable->setCursor(Qt::BlankCursor); //隐藏鼠标label->setCursor(Qt::ArrowCursor); //显示正常鼠标配置的时候./onfigurate的时候,设置no-mouse还是no-cursor哦,就不会显示了。或是在程序中定义宏QT_
2010-11-24 13:31:00
8709
原创 解决qt字体大小设置问题
关于字体的设置,这里使用的是qpf字体是一种不可缩放的字体,点阵字体该种字体的优点是占用的内存小,特别适合嵌入式环境的开发,关于Qt支持的其他的字体可以去google查看具体的内容,这里主要说明的是qpf在qt中的存储每种名字的字体只能存储其中的一种字号,因而如果你想要使用多种的字号的字体的话就需要对其赋予不同的名字如:wqy12_120_50.qpf wqy13_130_50.qpf.这样在程序中想用不同字号的字体的时候就可以指定相应的名字和字号以及粗细这样的参数,如此就可以了
2010-11-24 10:37:00
7484
原创 qt4.7.0的移植
一:环境介绍<br />虚拟机:vmware 7.0 <br />Linux 环境:ubuntu 9.04<br />交叉编译环境:arm-linux-g++ 3.4.5<br />硬件平台:TQ2440二:移植步骤安装交叉编译环境<br />由于这里使用的是QT2440管盘中提供的交叉编译工具链EABI-4.3.3_EmbedSky_20100610.tar.bz2,放在/opt/目录下解压<br />主要是在解压后可以看到其中含有两个版本,由于qt4.7.0的编译必须使用3.4.5版本所以在设置交叉编译
2010-11-24 10:36:00
4582
5
原创 CAN总线介绍
<br />CAN 总线介绍:<br />CAN 是Controller Area Network 的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。<br />网络各节点之间的数据通信实时性强<br /> 首先,CAN控制器工作于多主方式,网络中的各节点都可根据总线访问优先权(取决于报文标识符)采用无损结构的逐位仲裁的方式竞争向总线发送数据,且CAN协议废除了站地址编码,而代之以对通信数据进行编码,这可使不同的节点同时接收到相同的数据,这些特点使得CAN总线构成的网络各节点之间的数据通信实时性
2010-11-16 09:58:00
1637
转载 Qt中的键盘事件
<br />在Qt中,可以使用 void QWidget::keyPressEvent ( QKeyEvent * k )来进行键盘响应,例如:<br />void Form1::keyPressEvent( QKeyEvent *k )<br />{<br /> if(k->key() == Key_A)<br /> {<br /> this->focusNextPrevChild(FALSE);//按A时焦点切换至上一部件<br /> }<br /> else if
2010-09-09 15:34:00
1501
原创 使widget 没标题栏时仍可拖动
<br />正如我们所知,当有标题栏时,我们是可以随便拖动窗口的,但是有时我们希望创建的窗口时没有标题栏的,而此时要想拖放该窗体,我们就得另想办法了,其实最简单的思路就是重载窗体的mousePressEvent和mouseMoveEvent两个虚函数。其实这样做就是可以的,虽然看是去是3有点简单了。<br />void YourWidget::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) {
2010-09-06 19:35:00
1101
原创 QT 4.6.3 移植详细步骤(适合初学者)
<br />开发板:友善之臂 mini2440-128M<br />主机: VMware 6.5 + Fedora 9<br />开发版内核:Linux 2.6.29<br />交叉编译器:arm-linux-gcc-4.3.2<br /> <br />*******************首先移植 用于触摸屏矫正tslib1.4**********************************************<br />1. 解压下载的tslib1.4压缩包 <br /> 进入生成的目录,
2010-08-29 11:16:00
6685
原创 QT学习之 QT QTE QTcore QTopia
<br /> Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。<br /> Qt/E(Qt/Embedded)是用于嵌入式Linux系统的Qt版本。Qt/E去掉了X Lib的依赖而直接工作于Frame Buffer上,因而效率更高,但它并不是Qt的子集,而应该是超集,部分机制(如QCOP等)不能用于Qt/X11中<br /> Qtopia
2010-08-29 10:11:00
960
原创 debug和release的区别
Debug和Release有什么区别?怎么把Debug转成Release ?1。Debug和Release有什么区别,为什么要使用Release版本! 2。怎么把Debug转成Release 转载: Debug版本包括调试信息,所以要比Release版本大很多(可能大数百K至数M)。至于是否需要DLL支持,主要看你采用的编译
2009-07-09 12:31:00
1129
4
一个Java闹钟提醒小程序源代码
2009-10-04
j2me的Google地图及源程序
2009-10-04
Java超市进销存系统毕业设计完整版
2009-09-17
GPS寻找最短路径程序
2009-07-09
排课表程序(拓扑排序)
2009-07-09
GPS寻找最短路径程序
2009-07-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人