摘要:
#在libuv中使用openssl建立ssl连接@(blogs)使用openssl进行加密通信时,通常是先建立socket连接,然后使用SSL\_XXX系列函数在普通socket之上建立安全连接,然后发送和接收数据。openssl的这些函数可以支持底层的socket是非阻塞模式的。但当将openss... 阅读全文
摘要:
sds是redis中用来处理字符串的数据结构。sds的定义在sds.h中:1 typedef char *sds;简洁明了!简明扼要!(X,玩我呢是吧!这特么不就是c中的字符串么?!)。像redis这种高端大气上档次的服务器显然不会这么的幼稚。在sds的定义之后,还有一个结构体:1 struct sdshdr {2 int len;3 int free;4 char buf[];5 }有len,有free,这就有点意思了。很明显,根据这个结构体的定义,这是sds的header,用来存储sds的信息。注意最后的buf定义,这个buf数组没有设置长度。这是为神马呢?在gcc... 阅读全文
摘要:
2.0版本实现了MPRIS v2的基本功能。插件单独编译,不再是补丁的形式。需要安装DeaDBeeF的头文件。编译安装的DeaDBeeF已经默认安装了头文件。如果使用的是编译好的静态文件,需要拷贝DeaDBeeF源码中的deadbeef.h文件到/usr/local/include/deadbeef/中。make之后不需要make install,拷贝目录.libs中的mpris.so.0.0.0文件到DeaDBeeF文件夹的plugin目录,并重命名位mpris.so即可。注意,拷贝的是动态库,不要拷贝另外几个链接文件。修正了一些bug。下载地址最新版的osd-lyrics可以自动检测播放器 阅读全文
摘要:
DeaDBeeF是linux下优秀的播放器,osd-lyrics可以在linux下完美的显示歌词。osd-lyrics通过DBus与播放器通信,实现同步显示歌词。DeaDBeeF没有提供DBus接口,因此无法与osd-lyrics进行通信,也就无法通过osd-lyrics同步显示歌词。要想将两者连接起来,可以通过下面的方法:首先,让DeaDBeeF支持DBus接口。可以通过安装MPRIS插件实现。MPRIS是Media Player Remote Interfacing Specification,是Linux下媒体播放器交互的一个协议,具体可参考这里和这里。osd-lyrics使用MPRIS 阅读全文
摘要:
redis的哈希字典和其他字典的功能一样,用于根据key值快速的查找对应的value(这不废话么。。。)。redis的哈希字典使用的是哈希的方法(依旧是废话)。redis的字典有一种独特的rehash的方法,这是本文介绍的重点。 首先,dict包含四个结构体。关系如图所示: 结构体dict表示一个字典。每个字典中含有两个哈希表,ht[0]和ht[1]。哈希表用结构体dictht表示。哈希表采用链表法来处理冲突。结构体dictht的成员变量size表示table的长度,通常是2的幂次。sizemask等于size减1,用于计算哈希值对应的桶。used表示table的所有桶中的dictEntry实 阅读全文
摘要:
神马是redis?redis是一个开源的,牛B的键值数据库。由于键可以被保存为字符串,列表,哈希表,集合和有序集合,redis有时候也被称作数据结构服务器。这句蹩脚的翻译来自redis官网的介绍。想进一步了解的可以去它官网瞅瞅。目前redis已归入vmware门下。 下面,切入正题。redis是用c编写的。用c编写的程序都要面临一个很重要也很头疼的问题----内存管理。很多时候,不当的内存管理会成为万恶之源。。。redis的内存管理只有两个文件zmalloc.c和zmalloc.h。 zmalloc.h的内容如下: 1 void *zmalloc(size_t size); 2 void *z 阅读全文
摘要:
Lighttpd所要处理的错误分为两种。一种是http协议规定的错误,如404错误。另一种就是服务器运行过程中的错误,如write错误。 对于http协议规定的错误,lighttpd返回相应的错误提示文件。其实对于lighttpd而言,这不算错误。在返回错误提示文件后,相当于顺利的完成了一次请求,只是结果和客户端想要的不一样而已。 对于服务器运行中的错误,状态机会直接进入CON_STATE_ERROR状态。大部分的情况下,这种错误都是由客户端提前断开连接所造成的。比如你不停的刷新页面,在你刷新的时候,前一次的连接没有完成,但被浏览器强行断开,这时,服务器就会出现连接错误。对于服务器而言,刷新. 阅读全文
摘要:
yes:输出一串y,有时可以用来对付很多y/n选择的应用 。输出很多。。。banner:打印字符标题,就是用字符拼出大字来 ,最好把窗口最大化,否则可能显示不全。ddate:把日历转成什么其他历,Today is Sweetmorn, the 63rd day of Discord in the YOLD 3173fortune:输出一句话,内容有很多种,据说有唐诗宋词(有唐诗宋词的是fortune-zh,安装完之后,fortune会随机的输出唐诗宋词或英文名言。)cal 9 1752:打印日历,不过那一个月的有问题,原因如下:ppop 写道 "sniper在其BLOG中写道:今天偶 阅读全文
摘要:
好久没顾这个了,最近比较清闲,重新拾掇一下,有始有终。 回到正题,前一篇介绍完了请求的处理,先面lighttpd将会把处理的结果返回给客户端。状态机进入CON_STATE_RESPONST_START。在这个状态中,服务器主要的工作在函数connection_handle_write_prepare。这个函数不算复杂,主要是根据客户端请求的method来设置response的headers,其实就是设置“Content-Length”的值。下面是函数代码,做了一些删减: 1 static int connection_handle_write_prepare(server * srv, co. 阅读全文
摘要:
首先安装corkscrew。接着,写一个proxy wrapper。corkscrew的参数分别为:代理服务器的地址,代理服务器端口,所要代理的网址,认证文件。认证文件中包含用户名和密码,形式为“user:password”。将这个wrapper保存到文件proxy-wrapper中。修改git的默认配置文件,通常是/home/xxx/.gitconfig。在[core]段... 阅读全文
摘要:
先忙毕设,接着是考驾照。毕设顺利完成。路考挂了。。。真悲剧。想拿个驾照真不容易,不送礼是不行的! 阅读全文
摘要:
先考虑最优的定义假定总共有n位,每位m个状态,m*n=v在v一定时,使得m^n最大也就是k(n)=(v/n)^n最大考虑一般情况下ln(k(n))=(ln(v)-ln(n))*n=ln(v)*n - ln(n)*n对n求导 ln(v) - (n*1/n + ln(n)) = ln(v) - 1 - ln(n)解得ln(n)=ln(v)-1是k(n)唯一的极值点易知是k(n)最大值点所以n=v/e ... 阅读全文
摘要:
前面大概的介绍了一下lighttpd的状态机。在这篇中,将通过状态机,看看lighttpd到底是怎样处理连接请求的。在本篇中,我们只介绍lighttpd的最基本功能──处理静态页面。lighttpd处理静态页面要使用mod_staticfile.c插件。从名字中也可以看出是用来处理静态文件的。另外这个插件在配置文件中没有配置,是lighttpd默认会加载的。首先还是把状态机放这,以便查阅。首先,连... 阅读全文
摘要:
前面讲了lighttpd的fdevent系统,从这一篇开始,我们将进入lighttpd的状态机。状态机可以说是lighttpd最核心的部分。lighttpd将一个连接在不同的时刻分成不同的状态,状态机则根据连接当前的状态,决定要对连接进行的处理以及下一步要进入的状态。下面这幅图描述了lighttpd的状态机:(在lighttpd源码文件夹中的doc目录中有个state.dot文件,通过dot命令可... 阅读全文
摘要:
前面讲了lighttpd是怎样使用fdevent系统的,以及监听socket的处理过程。这一篇我们来看一看lighttpd是怎样处理连接socket的。首先,我们来看看lighttpd是怎样建立和客户端的连接的。前面在讲监听socket的处理过程中其实已经讲解了连接的建立过程。lighttpd监测监听socket的IO事件,如果有可读事件发生,那么表示有新的连接请求,然后调用network.c/n... 阅读全文